线程不结束进程不退出

本文讨论了当点击窗口关闭按钮时进程无法退出的问题,原因是UI线程未正常结束。通过发送WM_QUIT消息尝试退出线程无效,最终采用TerminateThread()强制终止线程以使进程退出。问题出在GetMessage()返回0导致while循环无法跳出。在适当位置调用SetEvent()来结束线程,并阐述了主线程结束对其他子线程的影响。
摘要由CSDN通过智能技术生成

发现点击窗口关闭按钮,等待很长时间进程也不能退出。发送WM_QUIT消息给UI线程让其退出;

进程也没能退出,是因为主线程UI线程,没有退出导致的。但是在进程管理器中能够杀死该进程。

在发送WM_QUIT消息的地方,用TerminateThread()强杀线程,线程如期被干掉,进程终于退出了。

原来是在线程中使用GetMessage接收消息,而接收到这个消息后GetMessage返回0,就是这个0,如果不让其退出也是可以的while循环不退出。

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,

    MSG msg;

    // 主消息循环: 
    while (GetMessage(&msg, nullptr, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    return (int)msg.wParam;
}
 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAN

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值