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

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

Синхронизация с основным тредом программы не из TThread


Страницы:   1 2 3 4

Дмитрий Белькевич ©   (2011-06-09 15:48:00) 

Добрый день. С синхронизацией из TThread, в целом, все понятно. Как сделать синхронизацию с основным тредом из треда, от которого есть только Idшник: GetCurrentThreadId?


oxffff   (2011-06-10 18:45:00) [61]

Вопрос не раскрыт. А так QueueUserAPC + Alertable state


Dimka Maslov   (2011-06-10 18:44:00) [62]

Для стандартных средств синхронизации абсолютно неважно какой поток с каким синхронизируется.


Юрий Зотов   (2011-06-10 18:05:00) [63]

Вообще, лучше, конечно, таких ситуаций изьегать (может быть, стоит пересмотреть логику программы?).

Но если уж очень надо, то можно попробовать так:

1. Найти поток по его ID.
2. Сделать ему suspend.
3. Синхронизироваться с главным потоком.
4. Сделать ему resume.

Но не факт, что это хороший способ. Лучше подумать, как бы этого избежать.


Eraser   (2011-06-10 17:31:00) [64]

> [3] misha_gr   (10.06.11 11:53)

Synchronize - прямой путь к дэдлокам и не очевидной логике работы программы.


han_malign   (2011-06-10 16:55:00) [65]


> от которого есть только Idшник: GetCurrentThreadId?

- ты вообще о чем? Что ты синхронизировать собрался - "Idшник"???
Какие данные принадлежащие основному потоку - изменяются в контексте твоего потока-призрака?


misha_gr   (2011-06-10 11:53:00) [66]

> вообще, как не единожды показа практика, такого рода синхронизаций, в т.ч. и из TThread лучше избегать

А можно поподробней?


Eraser   (2011-06-09 17:16:00) [67]

вообще, как не единожды показа практика, такого рода синхронизаций, в т.ч. и из TThread лучше избегать, т.к. в итоге все равно придется переделывать потом по той или иной причине. чаще всего хватает OnTerminate или сообщений.


Дмитрий Белькевич   (2011-06-09 15:56:00) [68]

Нашел классовую процедуру:


TThread.Synchronize(nil, SyncOnTrayLog);


так нормально будет работать?


Страницы:   1 2 3 4

Наверх

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