发现点击窗口关闭按钮,等待很长时间进程也不能退出。发送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

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

被折叠的 条评论
为什么被折叠?



