Nav*_*een 3 c++ winapi mfc multithreading
我正在阅读一些与线程相关的代码,并发现了这段代码:
MyThread::start()
{
//Create a thread
m_pThread = AfxBeginThread(/*some parameters*/)
//Create a duplicate handle for the created thread
m_hDuplicateHandle = DuplicateHandle(/* some more parameters*/)
}
MyThread::stop()
{
//Set some variables so that the thread comes out of its run() function
WaitForSingleObject(m_hDuplicateHandle, defaultTimeout);
CloseHandle(m_hDuplicateHandle);
}
Run Code Online (Sandbox Code Playgroud)
我的问题,为什么需要重复的句柄?我们不能直接等待原来的线程句柄吗?它以某种方式变得无效吗?
AfxBeginThread返回a CWinThread*
,MFC假定它将管理与线程关联的句柄.
因此,为了直接安全地使用句柄,您需要复制它,否则当线程结束时,MFC可能在您进入WaitForSingleObject调用之前关闭了句柄.
如果您直接使用win32 CreateThread API,那么您当然可以直接在返回的句柄上等待.