|
WINCE5.0 DirectShow播放wma,停止时异常
[复制链接]
用DirectShow播放,用计时器处理当前播放的时间和进度(1s触发一次)。停止播放时,程序偶尔异常。请大侠帮帮忙
异常的打印信息如下:
m_audio.Stop()
线程 '0x80026c10' (0x305291a) 已退出,返回值为 0 (0x0)。
线程 '0x800261e4' (0x2c18dea) 已退出,返回值为 0 (0x0)。
线程 0x833829ea 已退出,返回值为 0 (0x0)。
CWndAudio::OnTimer
Exception 002 Thread=82d47c20 Proc=62bfe17a 'A.exe'
AKY=00000801 PC=0006b860(ebook.exe+0x0005b860) RA=0006b830(A.exe+0x0005b830) BVA=00000000
线程 0xe2bfe58a 已退出,返回值为 0 (0x0)。
线程 0x430528f2 已退出,返回值为 0 (0x0)。
线程 0x3544f7a 已退出,返回值为 0 (0x0)。
m_audio.DestroyGraph()
线程 0x62cc87d2 已退出,返回值为 0 (0x0)。
Stop()函数如下:
BOOL CWndAudio::Stop()
{
m_audio.Stop();
NKDbgPrintfW(L"m_audio.Stop()\n");
m_audio.DestroyGraph();
NKDbgPrintfW(L"m_audio.DestroyGraph()\n");
return TRUE;
}
int CWndAudio::OnTimer(UINT nIDEvent, TIMERPROC* pTimer)
{
NKDbgPrintfW(L"CWndAudio::OnTimer\n");
if (m_audio.GetCurPos(m_nCurTime))
{
ASSERT(m_nDuration > 0);
m_nCurTime = min(m_nCurTime + 1,m_nDuration); // 误差补偿
int pos = m_nCurTime * m_progress.GetRange() / m_nDuration;
if (pos > m_progress.GetPos())
m_progress.SetPos(pos,1);
UpdateCurTime();
}
return 0;
}
按说OnTimer应该在m_audio.DestroyGraph();之后调用才对呀
|
|