Neo писал(а):
как-то мониторить, что поток с данными со стека завершился, если я переделываю так?Обычно - не за зачем, SafeMode с noWait после onExec гарантированно прервёт исполнение кода после onSafeMode столько раз, сколько понадобится для отработки параллельного потока, запущенного с парного SafeMode.
Но если очень долго может отрабатывать поток, и параллельный поток очень активно кладёт на стек, тогда либо ставить Wait, либо порождать очередной поток, для надёжности можно его останавливать (только не из самого себя, а через Timer, например).
------------ Дoбавленo в 08.41:
Neo писал(а):
произойдет такая же накладка, от которой я бежалС noWait вообще ничего не произойдёт, ветка после onSafeMode просто не будет выполняться, если же она начала исполняться, то отработает полностью. Но Вы обязаны помнить, что вся она принадлежит отдельному потоку, у Вас могут быть конфликты с параллельными потоками там, где не используетсяне возможно использовать SafeMode. Это уже забота программиста - отслеживать такие ньюансы.
Именно по-этому Вам тут рекомендуют использовать обычный Timer или точку onSyncExec (Thread) (точность хуже MMTimer, зато интервал срабатывания много меньше 16 мсек, характерных для Timer)- по сути, это псевдомногопоточное программирование, зато практически исключены конфликты за одни и те же данные, не надо ломать голову над "непонятными глюками" типа тех, с которыми Вы сталкиваетесь.
------------ Дoбавленo в 08.55:
Neo писал(а):
а сейчас новая проблемаЗа Вас всё "видит" SafeMode (WaitMode=NoWait):
Add(MultiElement,4063234,532,63)
{
@Hint=#29:Новый поток с теми же данными|
@Color=0
}
BEGIN_SDK
Add(EditMulti,15066390,21,21)
{
EventCount=1
WorkCount=1
Width=237
Height=193
link(doWork1,13267528:doSafeMode,[(45,27)(45,62)])
}
Add(MMTimer,16297399,77,147)
{
Interval=30
link(onTimer,10907756:doSafeMode,[])
}
Add(SafeMode,13267528,126,56)
{
Name="My_SafeMode3"
link(onSafeMode,14867656:doPush,[(180,62)(180,104)])
}
Add(SafeMode,10907756,126,147)
{
Name="My_SafeMode3"
WaitMode=1
link(onSafeMode,14867656:doPop,[(180,153)(180,111)])
}
Add(Stack,14867656,203,98)
{
link(onPop,15066390:onEvent1,[(239,111)(239,27)])
}
END_SDK