В каком потоке делать финализацию при останове скрипта?

Страницы: 1
RSS
В каком потоке делать финализацию при останове скрипта?
 
Если делать финализацию OnStop, то при закрытии квика скрипты будут останавливаться последовательно, т.е. ждать друг друга.
Если - в main, то есть вероятность, что main не уложится в отведённые 5 сек, и что-нибудь не успеет. Тогда надо в OnStop делать return побольше. Есть ли тут подводные камни?
Поделитесь опытом, как вы делаете?
 
По DestroyTable - в курсе, что её запускать лучше в OnStop
 
Код
function OnStop()
  run = nil
  t_id = nil
end

function main()
  while run do
    SetCell(t_id, ...)
    ...
    sleep(1000)
  end
  finalize()
end

Есть вероятность, что после срабатывания OnStop до удаления идентификатора таблицы (t_id = nil) main попытается записать в таблицу (SetCell)?
 
Похоже, скрипты в любом случае останавливаются последовательно.
Логи двух скриптов при закрытии QUIK 12.8.5.3
Код
11.03.26 21:34:50.907 OnStop
11.03.26 21:34:51.892 main
11.03.26 21:34:52.908 main
11.03.26 21:34:53.923 main
11.03.26 21:34:54.923 main
11.03.26 21:34:55.939 main
Код
11.03.26 21:34:56.923 OnStop
11.03.26 21:34:56.939 main
11.03.26 21:34:57.955 main
11.03.26 21:34:58.970 main
11.03.26 21:34:59.986 main
11.03.26 21:35:00.987 main
11.03.26 21:35:02.003 main

Видно, что OnStop второго скрипта вызывается только после завершения main первого.
Да и при остановке скриптов кнопкой "Остановить" GUI подвисает, пока скрипт полностью не остановится, независимо, в каком потоке происходит финализация.
Страницы: 1
Читают тему
Наверх