DeferredEvent можно и прямо из onExec вызывать (пока писал - nesco то же ответил). Но все равно есть проблемы:
- частый вызов забивает очередь сообщений (а это пропуск не только от DeferredEvent, но возможно и других, типа нажатий клавиатуры). В общем, признак плохого приложения.
- есть конфликт потоков при доступе к Memory: параллельный поток пишет, главный поток из DeferredEvent читает. Может быть нарушение данных. Хотя, вероятность такого для тебя может оказаться приемлемой. Подобные места надо защищать SafeMode.
Я лично предпочел бы таймер с защитой Memory по SafeMode.
С SafeMode следует учитывать такое. Если SafeMode используется также из главного потока (например, после DeferredEvent в той схеме), то в параллельном потоке в его SafeMode нельзя обращаться к главному потоку (оконным элементам, другим компонентам, которые шлют сообщения) - будет dead lock (главный поток останавливается в ожидании входа в критическую секцию, а параллельный поток, заняв эту секцию, останавливается в ожидании обработки сообщений главным потоком). Как я понимаю, SafeMode в главном потоке лучше не использовать.
Ответов: 4634
Рейтинг: 751
|
|||
карма: 26 |
|
Редактировалось 6 раз(а), последний 2019-02-04 13:21:06