Вверх ↑
Разработчик
Ответов: 26061
Рейтинг: 2120
#1: 2019-01-06 22:32:54 ЛС | профиль | цитата
Neo писал(а):
по Вашему примеру объясните, пожалуйста, разве не будет одновременного доступа к данным Memory на запись и на чтение если вдруг отрисовка подвиснет и произойдет следующее событие записи при чтении еще старого по onSyncExec? И разве параллельный поток не теряет свое преимущество параллельности в случае такого частого данных на форму по точке onSyncExec?

onSyncExec всегда работает в главном потоке, те параллельный поток выставляет флаг на выдачу сообщения и указатель на метод обработки этого события в обработчике главного потока внутренним методом Sender.Synchronize(SyncExec), а сам продолжает выполняться дальше. И ему совершенно безразлично, дойдет это сообщение до главного потока или не дойдет, те параллельный поток не ждет окончания события главного потока. Вот какое сообщение дойдет до главного потока, те текущие данные и будут прочитаны из Memory. И вообще надо исходить из того, что полного распараллеливания априори быть не может, тк все это поточное безобразие работает цепочкой в кольце обработчика ядра системы. А у параллельного потока стоит еще 100 мсек спать, те ни черта не делать, а за это время можно слона съесть.
карма: 22

0
Редактировалось 4 раз(а), последний 2019-01-06 22:44:38