解决方案 »

  1.   

    主要问题是在较慢的机器上,等别的消息执行完了再定时肯定会误差大。
    不知道实际需求是什么,用下面的方法试试吧
    QueryPerformanceFrequency+QueryPerformanceCounter
    能够精确到 ms 级,应该能满足要求。再高的精度就要想别的方法了。
      

  2.   

    GetTickCount()精度有限。受CPU影响。QueryPerformanceCounter等精度高一点
      

  3.   

    我用此函数监视串口的数据,串口的数据在6s内任何一个时间到达,我用此延时函数(100ms延时)循环检测串口数据。
      

  4.   

    void CGobal::MyDelay(long inMsecond)
    {
        if  (inMsecond<200) {
         if (inMsecond<0) inMsecond=1;
         Sleep(inMsecond);
         return;
        } 
        MSG msg;
        long i=0;
        while (1)   {
            ::GetMessage(&msg, NULL, 0, 0);
            ::TranslateMessage(&msg);
            ::DispatchMessage(&msg);
            Sleep(200);
            i+=200;
            if (i>inMsecond) break;
        }
    }