问题是我的程序太快了,以至于它没有及时检测到变化,或者 GetTickCount(),我怎样才能防止这种情况发生?
谢谢你
您是否将运行时间打印为整数?如果您要进行除法以获得经过的时间,请将分子或分母转换为浮点数。
计算运行时间x
并取平均值。
此外,您可以使用分析来获得准确的时间。
采用
void WINAPI GetSystemTimeAsFileTime(
_Out_ LPFILETIME lpSystemTimeAsFileTime
);
反而。它有更好的分辨率。在大多数情况下,这确实是需要的。
CodeProject 上有一个非常方便的类QueryPerformanceCounter
,我经常使用它:http: //www.codeproject.com/Articles/475/The-CPerfTimer-timer-class
GetTickCount 的精度为 5..15 毫秒,因此“零时差”是一个常见问题。
如果您需要精度,请使用QueryPerformanceCounter。
或者您可以尝试使用 rtdsc。详情见这里:http : //www.mcs.anl.gov/~kazutomo/rdtsc.html
#include <stdio.h>
#include "rdtsc.h"
int main(int argc, char* argv[])
{
unsigned long long a,b;
a = rdtsc();
b = rdtsc();
printf("%llu\n", b-a);
return 0;
}
甚至 chrono 也不错,但它需要符合 C++11(部分)。详细信息:std::chrono 和 cout