4

可能重复:
Windows 中的 C++ 高精度时间测量

我正在开发一个从 ftp 下载文件的程序,并且正在寻找一个高分辨率计时器库来计算下载速度,现在我使用的是 c++ time(NULL),但结果不准确。

是否有用于 Windows 平台的简单/易于使用、即插即用的 C++ 库?自上次通话后以秒为单位的时间或类似的东西。

编辑:

所以 QueryPerformanceCounter() 被多次提到,但通过其他线程,这是我发现的:

您应该被警告它是基于 CPU 频率的。例如,当启用省电模式时,该频率不稳定。如果要使用此 API,请确保 CPU 处于恒定频率。

但是请注意,英特尔的 SpeedStep 技术可能会在您的代码没有注意到的情况下改变 PerformanceFrequency

*我们还尝试为我们的线程修复线程关联性,以确保每个线程始终从 QueryPerformanceCounter 获得一致的值,这很有效,但它绝对会影响应用程序的性能。*

那么考虑到情况是否建议使用它?程序的性能和定时器的可靠性很重要

4

3 回答 3

3

你有 QueryPerformanceCounter 只要你不落入MSDN 文档评论中描述的错误用例

示例来自:如何使用 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;
}
于 2012-12-19T08:21:50.347 回答
2

如果您有一个支持 C++11 的编译器,那么您可以简单地使用std::chrono,如果没有,那么您可以boost::chrono使用

于 2012-12-19T08:26:34.363 回答
1

使用timeGetTime,分辨率应该足以满足你的需要。

于 2012-12-19T09:43:01.097 回答