SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );第二个参数应该是毫秒的。
我设置的参数,从10000(10秒)到1000(1秒)到100(100毫秒)到10(10毫秒)都是正常的可是把参数设置到10以内的,好象效果是全部都是10毫秒的效果。不知道MFC是不是就是这样的, 如果是这样的话, 那该在MFC程序,该如何解决。

解决方案 »

  1.   

    WM_TIMER消息代表的定时器本身就精度很低,而且受环境影响很大(延迟1万倍都有可能),适用于低精度定时器操作。如果真在乎精度,建议使用Waitable Timer,在其他线程中执行定时操作。
      

  2.   

    老问题了.
    TIMER不适合做高精度计时器.
      

  3.   

    恩,  想再问个问题。MFC中的  Sleep(??)
    也是这个情况么?如果是, 该怎么样,用其它方法解决。
      

  4.   

    http://www.naughter.com/cputicker.html 
    看看这个,高精度的。
      

  5.   

    http://www.vckbase.com/document/viewdoc/?id=1234
      

  6.   

    SetTimer是不精确的定时器,如果想要精确,使用多媒体定時器,但有個限制,每個進程只能開16個
      

  7.   

    这是Windows系统的限值
    Windows并非实时系统,其中时间精度最小只能10ms(XP下只能15ms)不论是SetTimer定时器,还是Sleep都只能在这个精度以上
    不过你可以使用多媒体定时器来实现你的功能,精度可以到1ms的
    timeSetTimer
      

  8.   

    嗯,timeSetEvent还是可以的,之前用这个做过精确到1ms的视频定时采集,效果可以
    不过要注意进程最多开16个
      

  9.   

    归纳的一个多媒体定时器应用的类
    http://blog.csdn.net/zgl7903/archive/2008/06/25/2584675.aspx
      

  10.   

    用定时器的方法不能这样精确的计时,因为WINDOWS不是一个实时的操作系统,所以它的定时器只能精确到这些,要更精确的计时,要用别的机智!
      

  11.   

    MSDN中SetTimer函数的说明:
    uElapse
    [in] Specifies the time-out value, in milliseconds. 
    Windows NT/2000/XP: If uElapse is greater than USER_TIMER_MAXIMUM, the timeout is set to 1.Windows 2000/XP: If uElapse is less than USER_TIMER_MINIMUM, the timeout is set to USER_TIMER_MINIMUM.Windows Server 2003: If uElapse is greater than USER_TIMER_MAXIMUM, the timeout is set to USER_TIMER_MAXIMUM.Windows XP SP2/Windows Server 2003 SP1: If uElapse is less than USER_TIMER_MINIMUM, the timeout is set to USER_TIMER_MINIMUM. If uElapse is greater than USER_TIMER_MAXIMUM, the timeout is set to USER_TIMER_MAXIMUM.此外,SetTimer定时也是很不准的。如果要求较高的精度,可以用CreateWaitableTimer、SetWaitableTimer函数。
      

  12.   

    这并不是算法等方面的不准,而是其处理方式决定的
    使用了sleep,会有线程的切换,即使Sleep(1),加上线程切换时间,也就相当于Sleep(15)左右,所以参数小于这个数的时候,不管用哪个,基本没有太大的差别
      

  13.   

    顶 1 楼, WM_TIMER消息代表的定时器本身就精度很低
    楼主在网上找找关于精确定时的文章就明白了
      

  14.   

    定时器的精度和MFC没关系,和操作系统有关.
      

  15.   

    WM_TIMER确实精度差,而且消息多了之后会被抛弃的
      

  16.   

    WM_TIMER
    SetTimer好像只能到五十几个毫秒吧
      

  17.   

    用多媒体时钟,精度高些.
    不建议用Waitable Timer ,他是异步调用回调函数,更是不精确.