【BUG之旅】程序不能退出问题

来源:互联网 发布:尚观云计算 编辑:程序博客网 时间:2024/06/05 01:11

窗口A创建两个线程T1,T2,在OnClose函数中调用了TerminateThread结束这两个线程,发现最后程序没有正常返回。最后定为是这个函数没有正常结束线程。

之后改用设定标志位让进程自己退出的方法,在软件中产生了死锁。

//A线程 其中有一部分代码

while(!bExit)
{

......
UpdateWindow();
}

bExitSuccess  = TRUE;

//主线程中设定A的退出标志

bExit = TRUE;

while(!bExitSuccess);


会有某一个时刻,bEixt = TRUE时运行到UpdateWindow();这里UpdateWindow();是一个阻塞函数,A等待主线程处理WM_PAIT消息。而现在主线程正在处理WM_CLOSE消息,导致死锁。因此可以把绘图的部分封装到一个Draw函数中,而不用OnPaint()进行重绘,从而绕开了消息机制

解决了死锁问题。就可以直接用WaitForSingleObject来等待线程返回,这样更加优雅点

0 0