我这里主要说的计时器。因为我有时候要测试一下模块性能,所以需要计时。
这里主要说三种:
-
clock_t
当对于精度要求不高时,使用clock_t
。这种方法是毫秒级。使用方法:#include <time.h> #include <iostream> int main(){ clock_t start = clock(); Sleep(1000); clock_t end = clock(); int time = end - start; cout << "Time cost: " << time << endl; //输出1000 return 0;
clock()函数获取当前时间,这样相减就可以得到耗时数据。
-
QueryPerformanceFrequency
和QueryPerformanceCounter
这是windows下的精确时间获取。它需要硬件支持高精度计时器。使用方法:#include <windows.h> #include <iostream> int main(){ LARGE_INTEGER freq; LARGE_INTEGER start; LARGE_INTEGER end; QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&start); Sleep(1000); QueryPerformanceCounter(&end); double time = (double)(end.QuadPart - start.QuadPart) / (double)freq.QuadPart; cout << " Time cost: " << time << endl; return 0; }
这里需要注意的是这里的
time
是以秒为单位的。所以毫秒级的数据需要×1000,微秒级需要×1,000,000。
(这里需要注意的是……windows.h这个万恶的头文件……include的时候和很多头文件会有顺序问题) -
gettimeofday
这是Linux下微秒级时间的获取方法。使用方法如下:#include <sys/time.h> #include <unistd.h> #include <iostream> int main(){ struct timeval start, end; gettimeofday( &start, NULL ); sleep(1); gettimeofday( &end, NULL ); long int time = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_usec - start.tv_usec); cout << "Time cost: " << time << endl; return 0; }
注意: Linux下sleep的s是小写的,而且单位是秒。
(如有错漏,还望指摘)