Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Дождаться завершения потока


Автор: mekhanikus 15.5.2011, 02:24
В основной программе создаю поток:
Код

hThread = CreateThread(NULL,0,TmrThread,(LPVOID)hwnd,0,&IDThread);

Поток  выводит в трей иконку.
Иногда поток выводит сообщения ввиде MessageBox.

При закрытии основной программы посылаю в тред месседж о завершении работы:
Код

PostThreadMessage(IDThread,TRD_EXIT,0,0);

и жду его завершения:
Код

WaitForSingleObject(hThread, INFINITE);

Поток завершает работу, в том числе убирает иконку из трея.

Все хорошо, если нет открытых МесседжБоксов созданых потоком.
В этом случае основная программа завершается, а в трее остается иконка, которая ни на что не реагирует.

Вопрос - как этого избежать?

Автор: ASMatic 15.5.2011, 13:03
WaitForSingleObject( 3000 );
if (ERROR_TIMEOUT)
    TerminateThread();

мож так получится..

Автор: mekhanikus 15.5.2011, 14:35
Взглянул трезвым взглядом на код,  smile 
и, кажется, я понял в чем ошибка.
Wait честно ждет завершения процесса,
просто мой TRD_EXIT не всегда доходит до цели.  smile 
Буду курить в эту сторону.

Автор: mekhanikus 16.5.2011, 14:56
Немного подкорректировал код.
Теперь вроде все работает как надо.

Вперед! навстречу новым багам.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)