C++Windows中的高分辨率定时器库
High resolution timer library in C++ Windows?
可能的重复:
Windows 中的C++高精度时间测量
我正在开发一个从ftp下载文件的程序,并正在寻找一个高分辨率定时器库来计算下载速度,目前我使用的是c++时间(NULL),但结果并不准确。
有没有一个简单/易用、即插即用的windows平台c++库?以秒为单位给出自上次呼叫或类似事件以来经过的时间。
编辑:
所以QueryPerformanceCounter()被提到过很多次,但通过其他线程,我发现了这一点:
应该提醒您,这是基于CPU频率的。当例如启用节能模式时,该频率是不稳定的。如果您想使用这个API,请确保CPU处于恒定频率
不过,请注意,英特尔的SpeedStep技术可能会在代码未注意到的情况下更改性能频率
*我们还尝试固定线程的线程相关性,以确保每个线程始终从QueryPerformanceCounter获得一致的值,这很有效,但它绝对会扼杀应用程序的性能。*
因此,考虑到目前的情况,使用它是否明智?程序的性能和定时器的可靠性是非常重要的
如果您没有陷入MSDN文档注释中描述的错误用例,那么您就有QueryPerformanceCounter
示例来自:如何使用QueryPerformanceCounter?
#include <windows.h>
double PCFreq = 0.0;
__int64 CounterStart = 0;
void StartCounter()
{
LARGE_INTEGER li;
if(!QueryPerformanceFrequency(&li))
cout << "QueryPerformanceFrequency failed!n";
PCFreq = double(li.QuadPart)/1000.0;
QueryPerformanceCounter(&li);
CounterStart = li.QuadPart;
}
double GetCounter()
{
LARGE_INTEGER li;
QueryPerformanceCounter(&li);
return double(li.QuadPart-CounterStart)/PCFreq;
}
int main()
{
StartCounter();
Sleep(1000);
cout << GetCounter() <<"n";
return 0;
}
如果您有一个支持C++11的编译器,那么您可以简单地使用std::chrono
,如果没有,那么boost::chrono
由您的服务
使用timeGetTime
,分辨率应该足以满足您的需求。
相关文章:
- Ardunio UNO解决了多个重叠的定时器循环
- 在Windows(C++)中使用USB相机拍摄高分辨率照片
- 我们能否在stm32f中使用硬件定时器控制两个独立的进程
- Arduino Nano:A4988 使用串行输入时通过定时器进行步进控制不稳定
- 如何在C++中为高分辨率时钟声明变量?
- 没有信号处理程序的POSIX定时器的目的是什么?
- 在定时器回调函数中使用 Sleep() 会导致C++出现问题吗?
- 在没有NtSetTimerResolution的Windows上提高计时器分辨率(高分辨率)
- 如何在Qt中修改QWebsocket定时器
- 实现高分辨率计时器的最佳方法
- DX9 桌面窗口管理器高 CPU
- 用户空间(Linux)中是否有高分辨率时钟(我们)?
- C++Windows中的高分辨率定时器库
- 跨平台C++高精度事件定时器实现
- C++中的高分辨率定时器
- 高分辨率计时器与低分辨率计时器
- 为什么我应该使用SetTimer功能,而不是多媒体定时器服务的应用程序不需要高分辨率定时
- Windows(也包括OS X、Linux)上Qt中的高分辨率定期计时器
- 如何用c++在windows上实现长期高分辨率定时
- 正在寻找高分辨率计时器