VC++线程安全退出
完善线程退出机制
加入线程退出条件变量m_bQuitThread, 初始化为false.
在线程内的循环中加入退出变量检测,当m_bQuitThread为true时,主动结束线程
在程序退出时,首先设置m_bQuitThread为true,而后使用WaitForSingleObject等待线程完全退出
代码
CDialogList::CDialogList(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_DIALOG_LIST, pParent)
{
m_bQuitThread = false;
}
// 启动线程
m_refreshLatencyThread = AfxBeginThread((AFX_THREADPROC)RefreshThread, this);
// 退出逻辑
void CDialogrList::EndThread() {
m_bQuitThread = true;
WaitForSingleObject(m_refreshLatencyThread->m_hThread, INFINITE);
TRACE(TEXT("线程已经退出"));
}
这么做其实是有问题的。假设一种情况,EndThread()中,m_bQuitThread = true和WaitFor...