Вверх ↑
Разработчик
Ответов: 26155
Рейтинг: 2127
#1: 2019-01-06 23:10:40 ЛС | профиль | цитата
Neo писал(а):
И по поводу вот такого примера, данные уже синхронизированы с главным потоком после MT_String?

Смотря в чем ты это читаешь? MT_String, в данном случае -- буфер, если используется событие onResult, то выдаваться оно будут в том потоке, в котором запущена вся цепь событий. Если же использовать нижнюю точку Result, то прочитать ее можно когда угодно, но будут ли данные актуальны, тут надо уже смотреть весь алгоритм.

Neo писал(а):
А все флаги обязательны к выполнению в главном потоке, или как и в DeferredEvent - кому повезет, тот и выполнится?

DeferredEvent -- это такой же, только короткий оконный обработчик, как и главный. Те оба этих обработчика обрабатываются системой почти одинаково. Те, как система отработает очереди событий для обработчиков, так и будет, похерит она их или не похерит, это уже к ней вопросы. Это вполне может произойти при переполнении очереди событий. Тут все зависит еще и от того, как вызывается обработчик, если послано SendMessage, то вызывающая функция ждет окончания выполнения события, если же как у DeferredEvent -- послано PostMessage, то событие ставится в очередь на обработку, те откладывается, а события цепи выполняются дальше. Естественно, что SendMessage более приоритетен, чем PostMessage, тк невыполнение первого может привести к зависанию приложения, невыполнение же второго просто не приведет к дальнейшим действиям, но управление уже будут передано системе внутри приложения.
карма: 22

0
Редактировалось 1 раз(а), последний 2019-01-06 23:19:37