我正在开发一个从ftp下载文件的程序,我正在寻找一个High-Res计时器库来计算下载速度,现在我正在使用c ++时间(NULL),但结果并不准确。
是否有一个简单/易用,插入N播放的Windows平台的c ++库?自上次通话或类似事件以来,在几秒钟内完成的时间。
修改
所以QueryPerformanceCounter()被多次提到过,但是通过其他线程这就是我发现的:
应该警告您它是基于CPU频率的。例如,当频率不稳定时启用省电模式。如果要使用此API,请确保CPU处于固定频率。
但请注意,英特尔的SpeedStep技术可能会在没有您的代码注意的情况下改变PerformanceFrequency
*我们还尝试修复线程的线程亲和性,以保证每个线程始终从QueryPerformanceCounter获得一致的值,这可以工作,但它绝对杀死了应用程序中的性能。 *
因此,考虑到这种情况,建议使用它吗?程序的性能和计时器的可靠性非常重要
答案 0 :(得分:3)
你有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;
}
答案 1 :(得分:2)
如果你有一个支持C ++ 11的编译器,那么你可以简单地使用std::chrono
,如果没有,那么boost::chrono
就是你的服务
答案 2 :(得分:1)
使用timeGetTime
,解决方案应该足以满足您的需求。