【问题标题】:correctly terminate a running thread which "works"正确终止“工作”的正在运行的线程
【发布时间】:2011-08-02 12:25:32
【问题描述】:

我有一个这样的线程:

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,但是挂了,我认为停止线程不是一个好的解决方案。

有人有想法吗?

最好的问候 本杰迈耶

【问题讨论】:

  • 不要使用CreateThread(),除非您知道它做什么。 CreateThread() 没有正确初始化运行时,也没有设置 CRT 终结挂钩以在线程死亡时执行。在此处查看讨论:stackoverflow.com/questions/331536/…

标签: c multithreading winapi createthread


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2012-02-04
    相关资源
    最近更新 更多