![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
0xDEAD |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 20.9.2009 Репутация: 3 Всего: 3 |
Добрый день!
Есть у меня такой код:
Окошко и функция запускаются в разных потоках. По задумке, функция Function должна заморозить поток окошка, сделать свою работу, и снова его отморозить. Это почти всегда работает, но иногда зависает: Function не возвращается с SendMessage (строка 9), несмотря на то, что Proc вызвал ReplyMessage! Как такое получается? |
||||
|
|||||
bass |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
SendMessage ждет обработки сообщения..... А поток оконной процедуры как вы пишите замораживаеться.... Ну и дид лок......
Посмотрите в сторону PostMessage |
|||
|
||||
0xDEAD |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 20.9.2009 Репутация: 3 Всего: 3 |
Так я же вызываю ReplyMessage, не должен он ждать. Опять же, обычно все правильно работает, но иногда зависает. А что туда смотреть? Единственный вариант, который мне пришел в голову, это использовать два события:
|
||||
|
|||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 4 Всего: 17 |
Поток с Function только один?
А вообще посмотрите и дайте посмотреть стеки потоков при дедлоке. |
|||
|
||||
0xDEAD |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 20.9.2009 Репутация: 3 Всего: 3 |
||||
|
||||
korian |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 651 Регистрация: 8.3.2008 Где: Украина, Харьков Репутация: 4 Всего: 17 |
ну у меня только один вариант, когда вызывается SendMessage в Function, основной поток уже висит на WaitForSingleObject.
Можно проверить: Надо какой-нить третий поток, которым можно будет управлять из debugera 1) Ловим deadlock, 2) замораживаем Function поток 3) в вспомогательном потоке размораживаем основной поток (отпускаем объект для WaitForSingleObject в основном потоке) 4) если в основном потоке опять появится сообщение MSG_EVENTBLOCK, то где-то косяк в логике |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |