правильно завершить работающий поток, который "работает" - PullRequest
1 голос
/ 02 августа 2011

У меня есть такая тема:

DWORD WINAPI message_loop_thread(LPVOID dummy) {
        MSG message;
        while (GetMessage(&message, NULL, 0, 0)) {
                TranslateMessage(&message);
                DispatchMessage(&message);
        }
}

И я начинаю это с CreateThread:

DWORD thread_id;
CreateThread(0, 0, message_loop_thread, 0, 0, &thread_id);

Кажется, это работает, но как я могу правильно закрыть эту тему? Обычно поток ожидает GetMessage, поэтому поток заблокирован, я думаю.

Есть ли хороший способ сделать это? Я попытался TerminateThread, но это зависает, и я думаю, что это не очень хорошее решение, чтобы остановить поток.

У кого-нибудь есть идея?

С наилучшими пожеланиями Бендж Майер

1 Ответ

3 голосов
/ 02 августа 2011

Правильный способ - отправить от WM_QUIT до thread_id.Вы используете PostThreadMessage() для этого.В ответ GetMessage возвращает 0, цикл while завершается, а функция завершается (неправильно, вы пропускаете оператор return).Когда функция верхнего уровня потока завершается, поток заканчивается.

...