QueryPerformanceCounter

QueryPerformanceCounter

这个问题在这里已经有了答案:




8年前关闭。






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

是否有一个简单/易于使用的、即插即用的 Windows 平台 C++ 库?给出自上次调用以来耗时(以秒为单位)或类似的东西。

编辑:

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

您应该注意它是基于 CPU 频率的。这个频率不稳定时,例如。启用了省电模式。如果要使用此 API,请确保 CPU 处于恒定频率。

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

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

那么综合考虑使用它是否可取呢?程序的性能和定时器的可靠性很重要

最佳答案

您有 QueryPerformanceCounter,前提是您没有陷入 on the MSDN docs 备注中描述的错误用例

示例来自:How to use 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++ - C++ Windows 中的高分辨率计时器库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13948105/

10-17 01:29