MFC管理多线程实现及时安全停止线程
在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方法会等待线程结束后才返回,保证了线程的安全停止
原文地址: https://www.cveoy.top/t/topic/iYCO 著作权归作者所有。请勿转载和采集!