mfc判断是否有其他线程在运行将正在运行的线程安全退出
要判断是否有其他线程在运行,可以使用MFC中的CWinThread类的静态函数AfxGetThread来获取当前线程的指针,并使用CWinThread的静态函数AfxGetThreadState来获取当前进程的线程状态。具体代码如下:
BOOL IsOtherThreadRunning()
{
// 获取当前线程指针
CWinThread* pThread = AfxGetThread();
// 获取当前进程的线程状态
AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
// 遍历所有线程
for (POSITION pos = pThreadState->m_threadList.GetHeadPosition(); pos != NULL;)
{
CWinThread* pThreadItem = pThreadState->m_threadList.GetNext(pos);
// 判断是否为当前线程
if (pThreadItem != pThread)
{
// 如果有其他线程在运行,返回TRUE
return TRUE;
}
}
// 没有其他线程在运行,返回FALSE
return FALSE;
}
要将正在运行的线程安全退出,可以使用AfxPostQuitMessage函数向消息队列发送退出消息,并在线程的消息循环中处理该消息,使线程安全退出。具体代码如下:
void SafeExitThread()
{
// 发送退出消息
AfxPostQuitMessage(0);
// 获取当前线程指针
CWinThread* pThread = AfxGetThread();
// 等待线程退出
pThread->m_bAutoDelete = FALSE;
pThread->PostThreadMessage(WM_QUIT, 0, 0);
pThread->m_bAutoDelete = TRUE;
WaitForSingleObject(pThread->m_hThread, INFINITE);
}
调用SafeExitThread函数可以将当前线程安全退出。注意在退出前先发送退出消息,然后在线程的消息循环中处理该消息
原文地址: https://www.cveoy.top/t/topic/iVlR 著作权归作者所有。请勿转载和采集!