要判断是否有其他线程在运行,可以使用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函数可以将当前线程安全退出。注意在退出前先发送退出消息,然后在线程的消息循环中处理该消息

mfc判断是否有其他线程在运行将正在运行的线程安全退出

原文地址: https://www.cveoy.top/t/topic/iVlR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录