说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

请教大虾:为什么我打开的多媒体定时器停不掉!!!

编辑:说三道四文库 发布时间:2018-04-24 07:07
HTML文档下载 WORD文档下载 PDF文档下载
为什么我打开的多媒体定时器停不掉,timeKillEvent返回的总是97。

主要的源代码:

void CMmtimerDlg::OnBtnStart() 
{
    int iRetCode = 0; 
    // TODO: Add your control notification handler code here
#define TARGET_RESOLUTION 1  // 1-millisecond target resolution
    TIMECAPS tc;
    UINT     wTimerRes;

    if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR) 
    {
        // Error; application can't continue.
        return;
    }
    wTimerRes = min(max(tc.wPeriodMin, TARGET_RESOLUTION), tc.wPeriodMax);
    
    iRetCode = timeBeginPeriod(wTimerRes); 
    wMMTimerID = timeSetEvent(2000,wTimerRes,TimeProc,0,TIME_PERIODIC|TIME_CALLBACK_FUNCTION);
 
}
extern CMmtimerApp theApp;
void CALLBACK TimeProc(UINT uID,UINT uMsg,DWORD dwUser,DWORD dw1,DWORD dw2)
{    
    static DWORD dwLastTime;
    CString strTime;
    DWORD dwCurTime;
    dwCurTime=timeGetTime();
    strTime.Format("%d,diff=%d",dwCurTime,dwCurTime-dwLastTime);
    dwLastTime=dwCurTime;    
    ((CMmtimerDlg*)theApp.m_pMainWnd)->m_lstTime.InsertString(-1,(LPCTSTR)strTime);    
}

void CMmtimerDlg::OnBtnStop() 
{
 
    // TODO: Add your control notification handler code here
    int iRetCode=0;
    
    iRetCode = timeEndPeriod(10); 
    iRetCode = timeKillEvent(wMMTimerID);
    strMMTImerID.Format("iRetCode=%d,LastError=%d",iRetCode,::GetLastError());
    m_lstTime.InsertString(-1,(LPCTSTR)strMMTImerID);
 
}
timeBeginPeriod 和 timeEndPeriod 的参数值必须要一样啊!

timeBeginPeriod(wTimerRes); 
iRetCode = timeEndPeriod(10); // wTimerRes == 10?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘