关于QueryPerformanceCounter的高精度计时器

wmy12345 2008-02-12 08:04:23
我们可以用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不行吗?
...全文
618 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
东方之珠 2008-02-13
  • 打赏
  • 举报
回复
参考一下我写的高精度计时器 http://blog.csdn.net/chenjl1031/archive/2008/01/09/2032579.aspx
wmy12345 2008-02-13
  • 打赏
  • 举报
回复
问题解决了~~
timeGetDevCaps timeBeginPeriod timeEndPeriod 可以设置精度 sleep能精确到1ms~~~
谢谢大家~~
jadeluo 2008-02-13
  • 打赏
  • 举报
回复
VB对线程支持较差, 否则这个问题就容易解决了。
用户 昵称 2008-02-12
  • 打赏
  • 举报
回复
没办法,这问题的原因你也懂。就没个好使的方法,否则大家也不用讨论了。
wmy12345 2008-02-12
  • 打赏
  • 举报
回复
主要是循环查询占cpu啊 还是个死循环。。 加那个有用吗。。。
用户 昵称 2008-02-12
  • 打赏
  • 举报
回复
http://hack.gameres.com/showthread.asp?threadid=90386

这个不错,试试吧。我在家里没有vb,无法试。
用户 昵称 2008-02-12
  • 打赏
  • 举报
回复
PeekMessage那几句是处理系统消息的,本来在vc中用来充当vb里的doevents,到底占用多少cpu时间我也不知道,
用户 昵称 2008-02-12
  • 打赏
  • 举报
回复
你在里面用VB实现下列代码试试



MSG msg;

if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}



或试试在doevents的后面加上一个sleep(1)试试,windows不是实时系统,这种精度的时差在应用层本来就是个难题。
wmy12345 2008-02-12
  • 打赏
  • 举报
回复
不能 那个也是16ms啊 我试了。。。
用户 昵称 2008-02-12
  • 打赏
  • 举报
回复
gettickcount可以精确到1毫秒

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧