AfxBeginThread需要需要CloseHandle?解决办法

来源:互联网 发布:python cbind 编辑:程序博客网 时间:2024/05/16 04:44

选自:http://www.myexception.cn/vc-mfc/300534.html

1、AfxBeginThread需要需要CloseHandle???
一般的创建线程,是会CloseHandle的

但是AfxBeginThread 需要吗???



问题2:

当线程暂停后,如果此时关闭 主界面。。。。

如何关闭子线程呢????


问题3:对于AfxBeginthread的线程, 主线程可不可以 用ExitInstance的方式来退出子线程???




------解决方案--------------------------------------------------------
1、不需要。这个是MFC封装了的。
2、当一个线程被挂起后,用户关闭程序,正确的做法当然是先退出挂起的线程,
方法先恢复线程,然后跟线程通信(可能是全局变量、事件,或者消息,前两个
一般用于跟工作线程通信,后者用于跟UI线程或者带有自写消息循环的线程通信},
让线程自己退出,主线程等待线程句柄(比如等1秒钟),如果等不到,可调用
TerminateThread 强行终止线程,当然,强行终止是可能造成内在泄漏的,
所以我一般宁可多等一会儿,比如两秒。
3、兔子党组织部长 给的代码,我觉得
pThread-> m_bAutoDelete = FALSE; //是为了能够等到UI线程句柄,不然线程返回后句柄就无效了。好像对于工作线程没必要。
pThread-> PostThreadMessage(...); //这里一般是传个WM_QUIT消息
WaitForSingleObject(pThread-> m_hThread); //这就是等线程句柄,应该再加个时间,比如:
WaitForSingleObject(pThread-> m_hThread, 2000);

CloseHandle(pThread-> m_hThread); //这一句是否有必要?
delete pThread; //这是为了让线程类析构
pThread = NULL; //如果马上要退出程序了,这一句也可以不要。

其他参考:http://bbs.csdn.net/topics/70107258