`

Splayer CGraphThread 分析

 
阅读更多
主程序 对CGraphThread 分析以及事件分析



建立 在MainFrm.cpp OnCreate中


m_pGraphThread = (CGraphThread*)AfxBeginThread(RUNTIME_CLASS(CGraphThread));


if(m_pGraphThread)
m_pGraphThread->SetMainFrame(this);




主程序销毁时 调用
if(m_pGraphThread)
{
CAMEvent e;
m_pGraphThread->PostThreadMessage(CGraphThread::TM_EXIT, 0, (LPARAM)&e);
if(!e.Wait(5000))
{
TRACE(_T("ERROR: Must call TerminateThread() on CMainFrame::m_pGraphThread->m_hThread\n"));
TerminateThread(m_pGraphThread->m_hThread, -1);
}
}




使用 在OpenMedia 事件中调用
if(m_pGraphThread && fUseThread
&& AfxGetAppSettings().fEnableWorkerThreadForOpening)
m_pGraphThread->PostThreadMessage(CGraphThread::TM_OPEN, 0, (LPARAM)pOMD.Detach());
else
OpenMediaPrivate(pOMD);




使用 在CloseMedia事件中调用
if(m_pGraphThread )
{


CAMEvent e;
m_pGraphThread->PostThreadMessage(CGraphThread::TM_CLOSE, 0, (LPARAM)&e);
// either opening or closing has to be blocked to prevent reentering them, closing is the better choice
if(!e.Wait(5000))
{
TRACE(_T("ERROR: Must call TerminateThread() on CMainFrame::m_pGraphThread->m_hThread\n"));
TerminateThread(m_pGraphThread->m_hThread, -1);
m_pGraphThread = (CGraphThread*)AfxBeginThread(RUNTIME_CLASS(CGraphThread));
if(m_pGraphThread)
m_pGraphThread->SetMainFrame(this);


}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics