![]() |
|
|
![]()
|
|
| Egoryan |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 22.7.2006 Репутация: нет Всего: нет |
Разбираюсь с CEvent,написал тестовое приложение. При щелчке на кнопке запускается поток,там выполняются какие-то действия и мне нужно отследить, когда он завершит свою работу. В классе диалога создал событие event. В потоковой функции вроде перевожу его в сигнальное состояние но почему-то оно не отслеживается и приложение "виснет" |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Неразумно запускать WaitForSingleObject в цикле: поставь один вызов и укжи тайм-аут INFINITE - будет тоже самое, но процессорное время жраться не будет.
Потом проверь отладчиком, доходишь ли ты до SetEvent в потоке. Добавлено @ 08:25 Думаю, не доходит, а стоит на первом же AddString. Знаешь, почему? Потому что AddString - это посылка сообщения LM_ADDSTRING окну, которое создано в главном потоке. Который в это время стоит и ждет ивента... Убери нафиг из потока всю работу с окнами - это дурная идея. -------------------- ... |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Так как с евентами работать, какая идея, както пытался но так и не понял. Какой у них принцып действия???
-------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
В двух словах: один (поток) ставит, другой ждет. Читай MSDN или, лучше, Рихтера.
Добавлено @ 13:51 В данном случае события не при чем: Egoryan соорудил классический deadlock: 2 потока ждут друг друга, и никто не работает... -------------------- ... |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Понеял, я можно простой примерчик, так на вскидку, к примеру диалог на нажатие кнопки посылает сообщение потоку умереть, и после сего ждёт пока тот не умрёт, после чего выходит из обработчика кнопки.
Как такое реализовать? -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Вот, очень схематично:
-------------------- ... |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Earnest, прошу прощения за задержку, но по ходу у Рихтера книг несколько, так в какой глятуть? -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
В наших магазинах только одну видела\знаю. Но несколько изданий. Windows для проффесионалов, издание любое, но лучше, конечно, посовременней. -------------------- ... |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Earnest, Спасибо только что сделал тестовую прогу с твоим кодом, всё работет.
Я так понят эвент это типа булевской переменой, только это обект ядра... Так у меня новй вопрос возник, а как правильно потоку просигнализировать о том что поток завершон, закончил своё дело? -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |