我使用AfxBeginThread生成一个线程,这是一个无限的while循环:
UINT CMyClass::ThreadProc( LPVOID param ) { while (TRUE) { // do stuff } return 1; }
我如何在我的类析构函数中杀死这个线程?
我想像
UINT CMyClass::ThreadProc( LPVOID param ) { while (m_bKillThread) { // do stuff } return 1; }
解决方法
积极杀死线程:
使用AfxBeginThread(CWinThread *)的返回值来获取线程句柄(m_hThread),然后将该句柄传递给TerminateThread Win32 API.这不是终止线程的安全方法,所以请继续阅读.
等待线程完成:
使用AfxBeginThread(CWinThread *)的返回值获取成员m_hThread,然后使用WaitForSingleObject(p-> m_hThread,INFINITE);如果此函数返回WAIT_OBJECT_0,则线程完成.而不是INFINITE,您也可以在超时发生之前等待毫秒数.在这种情况下WAIT_TIMEOUT将被返回.
信号到你的线程,它应该结束:
在做WaitForSingleObject之前,只需设置线程应该退出的某种标志.然后在你线程的主循环中,您将检查该bool值并打破无限循环.在你的析构函数中,你将设置这个标志,然后做一个WaitForSingleObject.
更好的方法:
如果你需要更多的控制,你可以使用像boost conditions这样的东西.