受@GamebabyRockSun_QQ大大的博客文章<<游戏引擎开发系列——消息循环篇>>的启发,令我对游戏框架中定时器和消息循环有了更深的认识, 感谢大大的分享;同时我也好奇文章中推荐的Windows的WaitableTimer定时器的精度到底有高,所以动手写个小程序来测试一下。
- 测试思路是: 在调用定时器(SetWaitableTimer函数)后立即记录硬件计数(QueryPerformanceCounter函数), 在收到定时器的信号(EVENT)后再记录一次硬件计数, 从两次的硬件计数的差值就可以得到本次定时的误差时间。
- 我的机器配置是i5-8300的CPU, RTX2060-6G显卡, 在开启双烤测试(CPU和GPU基本处于满负荷状态)时候启动自己编写的小程序来计算误差值,程序是在Release和x64下编译。定时间隔是0.01秒,做6000次定时. 结果如下面的图, 每次定时的平均误差时间是0.000275841秒,误差率只有2.75%。这个误差对游戏开发来说够用了,如果还不满足的估计只能使用暴力轮询的方法了。
- 下面是全部代码, 使用Windows控制台.
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
HANDLE hTimer = CreateWaitableTimer(nullptr, true, nullptr);
if (hTimer == nullptr)
{