【发布时间】:2012-11-05 18:45:59
【问题描述】:
问题是我的程序太快了,它没有及时检测到变化,或者GetTickCount(),我怎样才能防止这种情况发生?
谢谢
【问题讨论】:
-
如果花费不到一毫秒,您可以尝试更精确的方法。
QueryPerformanceCounter将是一个好的开始,或者新的<chrono>标头。
标签: c++ performance winapi time rendering
问题是我的程序太快了,它没有及时检测到变化,或者GetTickCount(),我怎样才能防止这种情况发生?
谢谢
【问题讨论】:
QueryPerformanceCounter 将是一个好的开始,或者新的 <chrono> 标头。
标签: c++ performance winapi time rendering
您是否将运行时间打印为整数?如果您要进行除法以获得经过的时间,请将分子或分母转换为浮点数。
【讨论】:
x 运行需要多长时间并取平均值。
此外,您可以使用分析来获得准确的时间。
【讨论】:
或者您可以尝试使用 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 and cout
【讨论】:
使用
void WINAPI GetSystemTimeAsFileTime(
_Out_ LPFILETIME lpSystemTimeAsFileTime
);
相反。它有更好的分辨率。在大多数情况下,这确实是需要的。
【讨论】:
CodeProject 上有一个非常方便的类,它封装了QueryPerformanceCounter,我经常使用它:http://www.codeproject.com/Articles/475/The-CPerfTimer-timer-class
【讨论】:
GetTickCount 的精度为 5..15 毫秒,因此“零时差”是一个常见问题。
如果您需要精确,请使用QueryPerformanceCounter。
【讨论】: