用多媒体计时器
DWORD timeGetTime(); 

解决方案 »

  1.   

    你是要像Settimer那样吧?可以用timeSetEvent()使用回调函数解决。参见MSDN.我用的方法是写一个回调函数,当每回回调时,将一全局标志加一。
    再用另外一个处理线程,检查该标志,以确定时间时间是否触发。
    这样做的另外一个原因是,在timeEvent的回调里面不能调用绝大部分API
      

  2.   

    加入一条汇编指令RXXXX,(具体在<<电脑爱好者2000合订本>>可兎得更精确的时敓.
      

  3.   

    看看MSDN中的GetTickCount(),还有不懂得再问
      

  4.   

    可以用事件对象调用timeSetEvent,这样不必用全局标志,还省去了同步的问题。一般的机器至少可以精确到2ms
      

  5.   

    GetTickCount是用于计时的,不是定时的。
    请看例子。一般是用回调函数,但在回调内不能调大多数API,所以我喜欢用下面的事件对象:
    void CMainFrame::OnFileTest() 
    {
    // TODO: Add your command handler code here
    timercount=0;
    hTimerEvent=CreateEvent(NULL,FALSE,FALSE,NULL);
    if (hTimerEvent==NULL)
    {
    MessageBox("CreateEvent failed","timer");
    return;
    }
    timeGetDevCaps(&tc,sizeof(TIMECAPS));
    if (timeBeginPeriod(tc.wPeriodMin)!=TIMERR_NOERROR)
    {
    MessageBox("timeBeginPeriod failed","timer");
    CloseHandle(hTimerEvent);
    return;
    }
    MMRESULT mmres=timeSetEvent(1,0,(LPTIMECALLBACK)hTimerEvent,
    (DWORD)GetSafeHwnd(),TIME_PERIODIC|TIME_CALLBACK_EVENT_PULSE);
    if (mmres==NULL)
    {
    MessageBox("timeSetEvent failed","timer");
    timeEndPeriod(tc.wPeriodMin);
    CloseHandle(hTimerEvent);
    return;
    }
    while (timercount<5000)  // 定时周期为1ms,5秒后关闭定时
    {
    WaitForSingleObject(hTimerEvent,INFINITE);
    timercount++;
    }
    timeKillEvent(mmres);
    if (timeEndPeriod(tc.wPeriodMin)!=TIMERR_NOERROR)
    {
    MessageBox("timeEndPeriod failed","timer");
    }
    CloseHandle(hTimerEvent);
    MessageBox("timer over!","timer");
    }