用c ++计算执行时间并始终为零

时间:2018-03-09 15:40:22

标签: c++ winapi

我在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;
 }

时间仍为零。

1 个答案:

答案 0 :(得分:4)

QueryPerformanceFrequency

  

检索性能计数器的频率。性能计数器的频率在系统引导时是固定的,并且在所有处理器中都是一致的。

如果您调用该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;
相关问题