Правильно завершить работающий поток, который "работает"

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

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 ответ

Решение

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

Другие вопросы по тегам