Nic*_*ick 10 c++ mfc multithreading
我生成一个线程,使用AfxBeginThread它只是一个无限的while循环:
UINT CMyClass::ThreadProc( LPVOID param )
{
while (TRUE)
{
// do stuff
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
如何在类析构函数中删除此线程?
我觉得有点像
UINT CMyClass::ThreadProc( LPVOID param )
{
while (m_bKillThread)
{
// do stuff
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
然后设置m_bKillThread要FALSE在析构函数.但是我仍然需要在析构函数中等待,直到线程死亡.
Bri*_*ndy 19
主动杀死线程:
使用返回值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.
更好的方法:
如果您需要更多控制,您可以使用类似增强条件的东西.
顺便说一句,关于TerminateThread(),以这种方式使用。
DWORD exit_code= NULL;
if (thread != NULL)
{
GetExitCodeThread(thread->m_hThread, &exit_code);
if(exit_code == STILL_ACTIVE)
{
::TerminateThread(thread->m_hThread, 0);
CloseHandle(thread->m_hThread);
}
thread->m_hThread = NULL;
thread = NULL;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22560 次 |
| 最近记录: |