![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Синхронизация с основным тредом программы не из TThread
Дмитрий Белькевич © (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);
так нормально будет работать?