我在c ++中计算执行时间时遇到了麻烦我使用了chrono和ctime库,但每次运行代码时我都会得到零,无论输入大小有多大,这都是我尝试的最后一次:
int main()
{
LARGE_INTEGER freq,t1,t2;
double elapsedtime;
int s = 1000000;
QueryPerformanceFrequency(&freq);
int *arr = new int[s];
int random;
srand(time(NULL));
random = rand() % s;
for (int i = 0; i <s; i++)
arr[i] = i;
QueryPerformanceFrequency(&t1);
cout << binarySearch(arr, 0, s-1,random)<<endl;
QueryPerformanceFrequency(&t2);
elapsedtime = (t2.QuadPart - t1.QuadPart)*100.0 / freq.QuadPart;
cout << "time :" <<elapsedtime<<endl;
return 0;
}
时间仍为零。
答案 0 :(得分:4)
检索性能计数器的频率。性能计数器的频率在系统引导时是固定的,并且在所有处理器中都是一致的。
如果您调用该API调用两次,并减去返回的值,则计算结果为零。
要确定两个时间点之间的时间,您需要拨打QueryPerformanceCounter:
LARGE_INTEGER t1{ 0 };
::QueryPerformanceCounter(&t1);
// Code to measure
LARGE_INTEGER t2{ 0 };
::QueryPerformanceCounter(&t2);
auto elapsed_time_in_mu_s = (t2.QuadPart - t1.QuadPart) * 1000000 / freq.QuadPart;