我们可以用QueryPerformanceCounter实现一个高精度timer:QueryPerformanceCounter c
while(true)
  QueryPerformanceCounter c1
  If c1 - c >= delay Then
    QueryPerformanceCounter c
    Call timer
  End If
  DoEvents
wend但是这样的问题是cpu占用100%...  如果在循环里加上sleep(1)就能降低cpu占用  但是sleep的精度太低
sleep(1)大概sleep了16ms...
怎样才能在保证精度2ms的情况下降低cpu占用呢?  难道只能用多媒体定时器? 用QueryPerformanceCounter不行吗?

解决方案 »

  1.   

    gettickcount可以精确到1毫秒
      

  2.   

    你在里面用VB实现下列代码试试 MSG msg; if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
    {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
    }或试试在doevents的后面加上一个sleep(1)试试,windows不是实时系统,这种精度的时差在应用层本来就是个难题。
      

  3.   

    PeekMessage那几句是处理系统消息的,本来在vc中用来充当vb里的doevents,到底占用多少cpu时间我也不知道,
      

  4.   

    http://hack.gameres.com/showthread.asp?threadid=90386这个不错,试试吧。我在家里没有vb,无法试。
      

  5.   

    主要是循环查询占cpu啊  还是个死循环。。  加那个有用吗
      

  6.   

    参考一下我写的高精度计时器   http://blog.csdn.net/chenjl1031/archive/2008/01/09/2032579.aspx
      

  7.   

    问题解决了~~
    timeGetDevCaps  timeBeginPeriod  timeEndPeriod 可以设置精度 sleep能精确到1ms~~~
    谢谢大家~~