C++Windows中的高分辨率定时器库

High resolution timer library in C++ Windows?

本文关键字:定时器 高分辨率 C++Windows      更新时间:2023-10-16

可能的重复:
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,分辨率应该足以满足您的需求。