总结Windows高精度计时API的用法作为今天的小小收获

  自从之前有一篇文章因操作不顺手导致丢失,就不敢来随便长篇大论了。今天稍微写一点,总结WindowsAPI里两个宝贝函数QueryPerformanceCounter()和QueryPerformanceFrequency()的用法。

  用到这两个函数是因为今天在优化软件渲染器的代码,要精确测试每个函数运行时间。写了这么多年程序了,在计时之类的功能上,我就一直在用那个GetTickCount(),从来没有用过更好的,感觉自己真是菜的可以o(╯□╰)o.要精确测试函数甚至代码块的运行时间,GetTickCount()精度远远不够,基本上是测不出来,只能用传说中的“高精度性能计数器”。

  起初不会用,就看了一下MSDN文档,大概明白了意思,QueryPerformanceFrequency用来获得“高精度性能计数器”的频率,这个“高精度性能计数器”也不知是个什么东西,运行代码测试,发现数值是和CPU的主频相等,如此一来倒是可以用来测CPU的速度了,是不是任何硬件环境里这个”高精度性能计数器”频率都和CPU频率一样?文档里没说,不知是否有其它情况。

  然后再看QueryPerformanceCounter参考,是用来获得“高精度性能计数器”当前走过的计时次数,难道是从开机以来?用代码测试发现我的猜想好像是正确的,是个超大的整数。这个函数很有意思,文档特别提醒在多核处理器上,这个值可能随机来自任何一个核心?这样可怎么测啊,又说引起这个问题的原因是BIOS和HAL,不是所有硬件都有这个问题,跟具体硬件有关。好吧,我殷切的希望我用的电脑解决这个问题了。文档给出了一个勉强的解决方法,就是对调用线程设置ProcessorAff

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值