Win32, ждать потока в основной очереди сообщений? - PullRequest
0 голосов
/ 10 ноября 2010

Я создал поток в WinMain, и после этого у меня есть классический цикл сообщений:

while(GetMessage(&msg, NULL, 0, 0))
{

    if (!done){
        GetExitCodeThread(dThread,&dwCode);
        if (dwCode!=STILL_ACTIVE){
            //thread done
        }
    }

if (!IsDialogMessage (UWnd, & msg))
    {
        TranslateMessage ( & msg );
        DispatchMessage ( & msg );
    }
}

Это работает нормально, но если поток завершается, он не сработает, пока не будет выполнено какое-либо действие в окне (мышь, фокус и т. Д.). Как получить триггер цикла, когда либо получено сообщение, либо поток завершен?

спасибо ...

Ответы [ 3 ]

5 голосов
/ 10 ноября 2010

Вместо того, чтобы проверять состояние потока внутри цикла сообщений, вы можете сделать так, чтобы поток отправлял сообщение в ваш поток пользовательского интерфейса (используя PostThreadMessage ) после его завершения.Тогда все, что вам нужно сделать, это обработать это сообщение в вашем WindowProc.

2 голосов
/ 10 ноября 2010

Вы смотрели на функцию MsgWaitForMultipleObjectsEx?

1 голос
/ 10 ноября 2010

Дескрипторы потока становятся сигнальными, когда поток заканчивается. Таким образом, вместо вызова GetMessage, вызовите MsgWaitForMultipleObjects: возвращаемое значение будет указывать, что некоторые сообщения доступны - очистить все сообщения, вызвав PeekMessage, или что дескриптор был сигнализирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...