在MFC中,可以使用CWinThread类来管理多线程。要实现及时安全停止线程,可以使用一个标志变量来控制线程的运行状态,并在线程中定期检查该标志变量的值,以决定是否停止线程。

以下是一个示例代码:

首先,在类的头文件中定义一个标志变量和一个线程句柄:

class CMyThread : public CWinThread
{
public:
    CMyThread();
    virtual ~CMyThread();

    virtual BOOL InitInstance();
    virtual int ExitInstance();

    void StopThread();

protected:
    static UINT MyThreadProc(LPVOID pParam);

    BOOL m_bRunning;
    HANDLE m_hThread;
};

然后,在类的实现文件中实现相应的方法:

CMyThread::CMyThread()
{
    m_bRunning = FALSE;
    m_hThread = NULL;
}

CMyThread::~CMyThread()
{
    StopThread();
}

BOOL CMyThread::InitInstance()
{
    // 初始化线程
    m_bRunning = TRUE;
    m_hThread = AfxBeginThread(MyThreadProc, this);
    return TRUE;
}

int CMyThread::ExitInstance()
{
    // 结束线程
    m_bRunning = FALSE;
    WaitForSingleObject(m_hThread, INFINITE);
    return CWinThread::ExitInstance();
}

void CMyThread::StopThread()
{
    // 停止线程
    m_bRunning = FALSE;
    WaitForSingleObject(m_hThread, INFINITE);
}

UINT CMyThread::MyThreadProc(LPVOID pParam)
{
    CMyThread* pThread = (CMyThread*)pParam;

    // 在线程中定期检查标志变量的值,决定是否停止线程
    while (pThread->m_bRunning)
    {
        // 执行线程任务
    }

    return 0;
}

在主线程中,可以通过创建CMyThread对象来启动线程,并通过调用StopThread方法来停止线程:

CMyThread myThread;

// 启动线程
myThread.InitInstance();

// 停止线程
myThread.StopThread();

以上代码示例中,StopThread方法会等待线程结束后才返回,保证了线程的安全停止

MFC管理多线程实现及时安全停止线程

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

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