Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Synchronize и критические секции


Страницы:   1 2

tippa ©   (2010-04-10 07:44:00) 

Можно ли использовать вместо метода Synchronize критические секции? Есть много потоков, в каждом имеется код, изменяющий прогрессбар, и этот код помещен в критическую секцию. То есть 2 потока не могут одновременно изменить прогрессбар, тогда вроде Synchronize и не к чему?


sniknik   (2010-04-11 10:49:00) [21]

> Через сообщения можно тому, кто умеет понимать сообщения.
а если не умеет, то посылать свое сообщение форме, и уже в нем, в обработчике формы (основном потоке) менять что нужно.
ИМХО, но это гораздо лучше, и удобнее синхронизаций из кучи разных потоков. и тормозов нет, т.к. получается "истинное" асинхронное выполнение. (а с синхронизациями или критическими секциями если много одномоментно то они просто станут в очередь...)


Германн   (2010-04-11 02:15:00) [22]


> Да и коряво выглядит.
>

Особенно repeat until false.


Игорь Шевченко   (2010-04-11 01:19:00) [23]

Через сообщения можно тому, кто умеет понимать сообщения. ProgressBar умеет, Grid - не умеет. Ну и т.д.

Да и коряво выглядит.


sniknik   (2010-04-11 00:45:00) [24]

> только не очень удобно, и нарушает принципы ООП.
очень удобно. плевать на "принципы ООП" если это чего то там нарушает.

> можно вести только из главного потока, и критические секции никак не помогут
почему это? какая разница если цель, не мешать друг другу, достигнута.


Leonid Troyanovsky   (2010-04-11 00:26:00) [25]


> _Юрий ©   (10.04.10 23:54) [3]

> Через сообщения можно, только не очень удобно, и нарушает
> принципы ООП.

От чего ж?

--
Regards, LVT.


_Юрий   (2010-04-10 23:54:00) [26]

Через сообщения можно, только не очень удобно, и нарушает принципы ООП.
А любую работу с визуальными компонентами методами VCL можно вести только из главного потока, и критические секции никак не помогут


tippa   (2010-04-10 14:39:00) [27]

Вот вычитал, что это дело можно замутить через сообщения, по-моему так даже проще.

var HPrBar:hwnd;//хэндл прогрессбара
    min,max:integer;//минимальное-максимальное значение
    pos:integer;//текущее значение
begin
SendMessage(HPrBar, PBM_SETRANGE, 0,MAKELPARAM(min, max));
repeat
sleep(10000);
SendMessage(HPrBar,PBM_SETPOS, pos, 0);
until false;
end;


MBo   (2010-04-10 08:12:00) [28]

>То есть 2 потока не могут одновременно изменить прогрессбар, тогда вроде Synchronize и не к чему?

Обращение из вторичных потоков к визуальным контролам надо синхронизировать с основным, ведь, например, система может вызвать перерисовку прогрессбара.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо