正确终止“工作”的正在运行的线程

时间:2011-08-02 12:25:33

标签: c multithreading winapi createthread

我有这样一个帖子:

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,但是这个问题很突然,我认为停止这个问题不是一个好方法。

有人有想法吗?

最好的问候 Benj Meier

1 个答案:

答案 0 :(得分:3)

正确的方法是将WM_QUIT发布到thread_id。您可以使用PostThreadMessage()。作为响应,GetMessage返回0,while循环退出,函数退出(错误地,您错过了return语句)。当线程的顶层函数退出时,线程结束。