gpt4 book ai didi

c++ - 如何在 WinXP 下获得准确的 1ms Timer Tick

转载 作者:可可西里 更新时间:2023-11-01 12:43:46 26 4
gpt4 key购买 nike

我尝试每 1 毫秒调用一个函数。问题是,我喜欢用 Windows 来做这个。所以我尝试了 multimediatimer API。

多媒体计时器API

来源

idTimer = timeSetEvent( 
1,
0,
TimerProc,
0,
TIME_PERIODIC|TIME_CALLBACK_FUNCTION );

我的结果是大多数时候 1 毫秒没问题,但有时我会得到双倍周期。看到 1.95 毫秒左右的小凸起 multimediatimerHistogram http://www.freeimagehosting.net/uploads/8b78f2fa6d.png

我的第一个想法是,也许我的方法运行时间太长了。但我已经测量过了,事实并非如此。

排队计时器 API

我的下一次尝试是将队列计时器 API 与

一起使用
hTimerQueue = CreateTimerQueue();
if(hTimerQueue == NULL)
{
printf("Error creating queue: 0x%x\n", GetLastError());
}

BOOL res = CreateTimerQueueTimer(
&hTimer,
hTimerQueue,
TimerProc,
NULL,
0,
1, // 1ms
WT_EXECUTEDEFAULT);

但结果也不是预期的那样。现在我得到的大部分时间是 2 毫秒的循环时间。 queuedTimer http://www.freeimagehosting.net/uploads/2a46259a15.png

测量

为了测量时间,我使用了 QueryPerformanceCounter 和 QueryPerformanceFrequency 方法。

问题

所以现在我的问题是,是否有人在 Windows 下遇到过类似的问题,甚至找到了解决方案?

谢谢。

最佳答案

如果不使用实时操作系统,您不能期望 1 毫秒调用您的函数。

在不是实时操作系统的 Windows 上(Linux 是类似的),以微秒精度重复读取当前时间并在直方图中存储连续差异的程序在 >10 毫秒内有一个非空容器!这意味着有时您会有 2 毫秒,但您也可以在通话之间获得更多时间。

关于c++ - 如何在 WinXP 下获得准确的 1ms Timer Tick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3361059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com