WaitableTimer精度测试

本文通过实测探讨了Windows WaitableTimer的精度,灵感来源于@GamebabyRockSun_QQ的文章。测试方法是设置定时器后记录硬件计数,接收到定时器信号时再次记录,以此计算误差。在i5-8300 CPU和RTX2060显卡的高负载环境下,6000次定时器间隔为0.01秒的测试中,平均误差仅0.000275841秒,误差率为2.75%,表明WaitableTimer适用于游戏开发的定时需求。
摘要由CSDN通过智能技术生成

受@GamebabyRockSun_QQ大大的博客文章<<游戏引擎开发系列——消息循环篇>>的启发,令我对游戏框架中定时器和消息循环有了更深的认识, 感谢大大的分享;同时我也好奇文章中推荐的Windows的WaitableTimer定时器的精度到底有高,所以动手写个小程序来测试一下。

  1. 测试思路是: 在调用定时器(SetWaitableTimer函数)后立即记录硬件计数(QueryPerformanceCounter函数), 在收到定时器的信号(EVENT)后再记录一次硬件计数, 从两次的硬件计数的差值就可以得到本次定时的误差时间。
  2. 我的机器配置是i5-8300的CPU, RTX2060-6G显卡, 在开启双烤测试(CPU和GPU基本处于满负荷状态)时候启动自己编写的小程序来计算误差值,程序是在Release和x64下编译。定时间隔是0.01秒,做6000次定时. 结果如下面的图, 每次定时的平均误差时间是0.000275841秒,误差率只有2.75%。这个误差对游戏开发来说够用了,如果还不满足的估计只能使用暴力轮询的方法了。
    在这里插入图片描述
  3. 下面是全部代码, 使用Windows控制台.
#include <windows.h>
#include <iostream>

using namespace std;

int main()
{
   
	HANDLE hTimer = CreateWaitableTimer(nullptr, true, nullptr);
	if (hTimer == nullptr)
	{
   
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值