Вверх ↑
Ответов: 4612
Рейтинг: 746
#1: 2019-01-10 15:30:24 ЛС | профиль | цитата
DeferredEvent можно и прямо из onExec вызывать (пока писал - nesco то же ответил). Но все равно есть проблемы:
- частый вызов забивает очередь сообщений (а это пропуск не только от DeferredEvent, но возможно и других, типа нажатий клавиатуры). В общем, признак плохого приложения.
- есть конфликт потоков при доступе к Memory: параллельный поток пишет, главный поток из DeferredEvent читает. Может быть нарушение данных. Хотя, вероятность такого для тебя может оказаться приемлемой. Подобные места надо защищать SafeMode.

Я лично предпочел бы таймер с защитой Memory по SafeMode.

С SafeMode следует учитывать такое. Если SafeMode используется также из главного потока (например, после DeferredEvent в той схеме), то в параллельном потоке в его SafeMode нельзя обращаться к главному потоку (оконным элементам, другим компонентам, которые шлют сообщения) - будет dead lock (главный поток останавливается в ожидании входа в критическую секцию, а параллельный поток, заняв эту секцию, останавливается в ожидании обработки сообщений главным потоком). Как я понимаю, SafeMode в главном потоке лучше не использовать.
карма: 26

0
Редактировалось 6 раз(а), последний 2019-02-04 13:21:06