C++ 计时

我这里主要说的计时器。因为我有时候要测试一下模块性能,所以需要计时。
这里主要说三种:

  1. 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()函数获取当前时间,这样相减就可以得到耗时数据。

  2. QueryPerformanceFrequencyQueryPerformanceCounter
    这是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的时候和很多头文件会有顺序问题)

  3. 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是小写的,而且单位是秒。

(如有错漏,还望指摘)

原创文章 34 获赞 41 访问量 5948

猜你喜欢

转载自blog.csdn.net/qq_44844115/article/details/103273509