你可以把
      do
     {
         dwStop = GetTickCount();
     }while(dwStop-10<dwStart);
     换成Sleep(10);
     睡10毫秒后再发消息。
  我认为最好是用多线程来处理,用单独的一个线程来定时地发送消息。

解决方案 »

  1.   

    Windows平台下不能达到真正的10ms定时
    GetTickCount()取出的数最高精度也只有10ms你这样做还不如直接用Sleep(10)算了
      

  2.   

          do
         {
             dwStop = GetTickCount();
             Sleep(0);
         }while(dwStop-10 <dwStart); 
      

  3.   

    Windows不是一个实时的操作系统
    平均定时精度也就10毫秒左右,差的情况50多毫秒都有
    要做实时可以想其它办法,Windows下一般有以下几种:
    1.基于DSP专用硬件设计    
    2.数据采集卡    
      必须有操纵系统核心层的驱动程序配合采集卡,才能实现较高实时精度。
    3. RTX (Real-Time Extension)   
      Windows硬件抽象层的实时扩展,具有独立的内核结构。RTX是纯软件的,定时精度最高可以在0.1ms
      

  4.   

    是比较耗CPU,比如用
    HANDLE CreateWaitableTimer(
      LPSECURITY_ATTRIBUTES lpTimerAttributes, // SD
      BOOL bManualReset,                       // reset type
      LPCTSTR lpTimerName                      // object name
    );
    BOOL SetWaitableTimer(
      HANDLE hTimer,                          // handle to timer
      const LARGE_INTEGER *pDueTime,          // timer due time
      LONG lPeriod,                           // timer interval
      PTIMERAPCROUTINE pfnCompletionRoutine,  // completion routine
      LPVOID lpArgToCompletionRoutine,        // completion routine parameter
      BOOL fResume                            // resume state
    );
      

  5.   

    你这个不是定时器的事,应该是while循环的事。
      

  6.   

    就是啊,你的空循环里浪费了大量cpu时间,sleep(0),可以让操作系统强制切换到别的进程,但是也没有效果
    sleep(10),不知道到sleep的精度是多少
      

  7.   

    sleep(10) 等效与sleep(15);最小精度是15,
      

  8.   

    cpu每隔20毫秒重新分配一下时间片,所以你所谓的10毫秒是不准确的。
    并且你循环一直在执行,
      

  9.   

    sleep(10)+多线程+线程同步应该可以了
      

  10.   

    建议 搜一下 “VC中实现在windows下的精确定时”,有篇文章提供了七种在windows下的定时方法,个人感觉值得一看~~~
    虽然我看不懂C++~~~~~~~~~~~~