Оптимальный способ остановки исполнения скрипта

Страницы: 1
RSS
Оптимальный способ остановки исполнения скрипта
 
Каков оптимальный способ программно остановить исполнение скрипта на QLua?
Например, код диагностирует некую внутреннюю ошибку по своей логике, выкидывает message и сразу останавливает работу скрипта во всех потоках.
 
Цитата
verder написал:
сразу останавливает работу скрипта во всех потоках
У скрипта один поток - мейн, второй поток, в котором выполняются колбеки - это главный поток квика.

Если вы сами создаете какие-то еще потоки, только вы и знаете, как их остановить. Вообще задача красивой остановки потока, выполняющего произвольный код, решения не имеет. Как пример потоки в c++, если в одном потоке случается unhandled exception, рушится все приложение без раскрутки стеков других потоков.

Если говорить только о стандартных потоках в квике, то вариантов два, либо ошибка в колбеке, либо в мейне. В мейне можно просто сгенерировать error и скрипт остановится. В колбеках надо выполнять все под pcall, если возникает ошибка, переправлять ее в мейн, а тот ее же бросит в своем потоке и сведет все к первому варианту. Это легко, если мейн построен как обработчик сообщений, тогда он просто вместо очередного сообщения получит сообщение об ошибке. Если в мейне свободно выполняемый код, придется периодически смотреть, не было ли в колбеках ошибки.

Чтобы в процессе распространения ошибки колбеки не продолжали посылать сообщения, можно завести глобальный флажок, устанавливаемый при любой ошибке, где бы она ни случилась. Каждый колбек в самом начале проверяет этот флажок, если установлен - просто сразу return.
 
Цитата
verder написал:
Каков оптимальный способ программно остановить исполнение скрипта на QLua?
Например, код диагностирует некую внутреннюю ошибку по своей логике, выкидывает message и сразу останавливает работу скрипта во всех потоках.
в main есть бесконечный цикл поставьте в нем переменную и присваивайте ей nil  при ошибке. В итоге скрипт завершит работу
Страницы: 1
Читают тему
Наверх