Цитата |
---|
verder написал: сразу останавливает работу скрипта во всех потоках |
У скрипта один поток - мейн, второй поток, в котором выполняются колбеки - это главный поток квика.
Если вы сами создаете какие-то еще потоки, только вы и знаете, как их остановить. Вообще задача красивой остановки потока, выполняющего произвольный код, решения не имеет. Как пример потоки в c++, если в одном потоке случается unhandled exception, рушится все приложение без раскрутки стеков других потоков.
Если говорить только о стандартных потоках в квике, то вариантов два, либо ошибка в колбеке, либо в мейне. В мейне можно просто сгенерировать error и скрипт остановится. В колбеках надо выполнять все под pcall, если возникает ошибка, переправлять ее в мейн, а тот ее же бросит в своем потоке и сведет все к первому варианту. Это легко, если мейн построен как обработчик сообщений, тогда он просто вместо очередного сообщения получит сообщение об ошибке. Если в мейне свободно выполняемый код, придется периодически смотреть, не было ли в колбеках ошибки.
Чтобы в процессе распространения ошибки колбеки не продолжали посылать сообщения, можно завести глобальный флажок, устанавливаемый при любой ошибке, где бы она ни случилась. Каждый колбек в самом начале проверяет этот флажок, если установлен - просто сразу return.