gpt4 book ai didi

c++ - Windows 精确计时:CreateTimerQueueTimer 或 system_clock::now() 出错?

转载 作者:行者123 更新时间:2023-11-30 01:23:50 27 4
gpt4 key购买 nike

我正在努力实现 +/- 毫秒计时精度。我希望线程之间的时间为 10 毫秒,但当我测量时间时,我得到的结果接近 15 毫秒。

我想了解问题是由于我测量时间的方式引起的,还是我测量时间准确并且 CreateTimerQueueTimer 引入了一些延迟

我的代码看起来像

#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <chrono>
#include <ctime>
using namespace std;
int current;
long long* toFill;
void talk()
{
chrono::time_point<chrono::system_clock> tp = \
chrono::system_clock::now();
toFill[current++]=chrono::duration_cast<chrono::milliseconds>(tp.time_since_epoch()).count() ;
}

int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hTimer;
current = 0;
toFill = new long long[1000];
CreateTimerQueueTimer(&hTimer,NULL,
(WAITORTIMERCALLBACK)talk,NULL,
0,10,0);
_sleep(3000);
DeleteTimerQueueTimer(NULL,hTimer,NULL);
for (int i = 1;i<current;i++)
{
cout << i << " : " << toFill[i]-toFill[i-1]<< endl;
}
return 0;
}

输出看起来像

...
161 : 16 <-- Should be 10
162 : 15
163 : 16
164 : 16
...

最佳答案

Windows 中计时器和实时时钟的准确性受时钟节拍中断率的限制。默认情况下每秒敲击 64 次,1/64 秒 = 15.625 毫秒。就像你看到的那样。

实际上可以提高该速率,请调用 timeBeginPeriod(10)在程序开始时获得 10 毫秒的精度。

关于c++ - Windows 精确计时:CreateTimerQueueTimer 或 system_clock::now() 出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14438798/

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