![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Synchronize
3APA3A © (2004-07-04 00:29:00)Что делает Synchronize? Я использую его и в общих чертах представляю что этот метод делает, но мне этого мало...
Rouse_ (2004-07-04 14:36:00) [41]> [7] y-soft © (04.07.04 07:56)
А какая разница?
Во первых когда применяют Synchronize, ожидают что пока процедура не выполнится - код за ней не будет отрабатываться.
Это раз.
Ну а во вторых - не ужели ты думаешь что в то время пока отрабатывается первый PostMessage - в месте с ним отработается и второй?
y-soft (2004-07-04 10:00:00) [42]>Mim1 © (04.07.04 09:20) [8]
Так и я о том же, только вот слишком часто люди не понимают, как это работает, и задают вопрос: почему безбожно тормозит? :)
Mim1 (2004-07-04 09:20:00) [43]
> [7] y-soft © (04.07.04 07:56)
Всякий овощ приносит пользу, будучи употребленным надлежащим образом в надлежащее время. (c) не помню
y-soft (2004-07-04 07:56:00) [44]Во многих случаях вместо пресловутого Synchronize гораздо выгоднее написать свою реализацию subj на основе PostMessage
Резон? SendMessage не возвращает управление до тех пор, пока посланное сообщение не будет обработано. В результате:
a. Тормозится вызывающий поток
b. Тормозятся все потоки, вызовы которых стоят в очереди этого потока
c. Тормозятся все потоки, вызовы которых стоят в очереди потока, который обрабатывает сообщение
Т.е. при слишком частом использовании Syncronize теряются все преимущества многопоточности
Григорьев Антон (2004-07-04 07:02:00) [45]Synchronize через SendMessage передаёт управление основному потоку. При обработке этого сообщения основной поток выполняет указанную процедуру.
3APA3A (2004-07-04 01:21:00) [46]Уговорили... =)
3APA3A (2004-07-04 01:21:00) [47]Ok...
jack128 (2004-07-04 00:55:00) [48]
> ведь основной поток выполняется постоянно, хотя бы тот же
> цикл обработки сообщений.
ну так посмотри исходники и увидешь ;-)
3APA3A (2004-07-04 00:46:00) [49]Кое что прояснилось, но не до конца - ведь основной поток выполняется постоянно, хотя бы тот же цикл обработки сообщений.
DrPass (2004-07-04 00:34:00) [50]Синхронизирует какой-либо метод с основным потоком - так, чтобы он не выполнялся параллельно с кодом основного потока.