1

Тема: OnStop

В справке к QLUA написано: Функция вызывается терминалом QUIK при остановке скрипта из диалога управления и при закрытии терминала QUIK."

Но почему тогда скрипт вида:

is_run=true

function main()

      while is_run do

            sleep(2000)

      end

end

function OnStop(stop_flag)

      is_run=false

end

не останавливается при закрытии квика?

2

Re: OnStop

ascerdfg пишет:

не останавливается при закрытии квика?

Останавливается, просто, когда вы запускаете квик, то скрипт, не остановленный кнопкой "остановить", тоже запускается.

3 (2015-08-19 13:40:26 отредактировано swerg)

Re: OnStop

Как уже было сказано выше - QUIK просто запоминает: на момент завершения работы терминала работал скрипт или был остановлен.
Если скрипт был остановлен кнопкой "Остановить" до закрытия терминала - то после повторного запуска терминала скрипт будет в состоянии "не запущен".
Если скрипт не был остановлен кнопкой "Остановить" до закрытия терминала - то после повторного запуска терминала скрипт сразу автоматически запустится.

При этом с точки зрения скрипта эти два события - остановка кнопкой "Остановить" или закрытие терминала - не отличается, как не отличается и запуск скрипта: по нажатию кнопки "Запустить" или скрипт автостартует при запуске терминала. Что очень хорошо с точки зрения создания скрипта: нет необходимости как-то по-особенному обыгрывать тот или иной сценарий.

Я взял скрипт из этой темы и вот какие события происходят при остановке скрипта и при закрытии терминала.
Эксперименты проводил на QUIK версии 6.17.2

  • Останавливаю скрипт кнопкой "Остановить":

    • OnStop signal=1  -- вызван OnStop()

    • main stop -- завершена main()

  • При работающем скрипте закрываю терминал:

    • OnClose -- сначала вызывается обработчик OnClose()

    • OnStop signal=1  -- после вызывается OnStop()

    • main stop -- завершена main()

При этом не зависимо от того, как был запущен скрипт - автостартован при запуске терминала (т.к. работал при выключении терминала) или по нажатию кнопки "Запустить" - с точки зрения скрипта вызовы инициирующих действий одинаковые:

  • OnInit

  • main start