用多媒体定时器定时向cview发送消息,运行中正常,但是软件退出是出错。
在view响应菜单项中启动定时器,如下
TimerID1 = timeSetEvent(100, wAccuracy,
(LPTIMECALLBACK) callBackProc,
(DWORD)this,TIME_PERIODIC);
在callBackProc中发送消息
void PASCAL callBackProc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2) 
{
CTestView *timer =(CTestView *)dwUser;
    timer->PostMessage(WM_USERMSG01,0,0);
}
在WM_USERMSG01消息响应方法中输出数字
void CTesthwndView::OnMyTimerMessage()
{
CClientDC dc(this);
CTime time;
time=CTime::GetCurrentTime( );
static UINT i;
CString str;
str.Format("%d",i);
dc.TextOut(10,10,str,str.GetLength());
i++;
}
软件退出时崩溃,提示访问的内存不能为read.
请不吝赐教,急盼多媒体定时器 cview 消息响应

解决方案 »

  1.   

    退出时,先用timeSetEvent设置回调函数为NULL
      

  2.   

    照你说的,是这样吗
    timeKillEvent(TimerID1);
    timeSetEvent(wTimerRes_1ms, wAccuracy,
    NULL,
    (DWORD)this,TIME_PERIODIC);
    仍然不行
      

  3.   

       把PostMessage()换成SendMessage()试试,退出时把定时器关掉!    
      

  4.   

    SendMessage()也试过了。
    timeKillEvent(TimerID1);不就是关定时器吗
      

  5.   

    你可以单独调试一下,加一个菜单项,点击菜单把定时器关掉!然后再关掉窗体试试,问题应该是出在timer指针那,窗体消失了,指针成了野指针!在调用就出这种错误!
      

  6.   

    debug版可以,你试过release版吗