总结一下C/C++程序中几种常用的计时函数

在编写程序时,有时需要准确测量一个算法的运行时间,以做到对某一特定的数据集,不同算法耗时的比较。

题主今天在编写算法课实验代码的时候,大致在网上搜索了下C/C++中几种常用的计时函数,在此做一个总结,希望对大家学习C/C++以及算法有所帮助。

// Windows系统下可以用 time(),clock(),timeGetTime(),GetTickCount(),
// QueryPerformanceCounter() 来对一段程序代码进行计时
#include 
#include 
#include                    //time_t time()  clock_t clock()    
#include                //timeGetTime()    
#pragma comment(lib, "Winmm.lib")   //timeGetTime()   

//使用方法:将Sleep()函数换成需要测试运行时间的函数即可。
int main()
{   
    //用time()来计时,以秒为单位
    time_t timeBegin, timeEnd;
    timeBegin = time(NULL);
    Sleep(1000);
    timeEnd = time(NULL);
    printf("%d\n", timeEnd - timeBegin);

    //用clock()来计时,以毫秒为单位
    clock_t  clockBegin, clockEnd;
    clockBegin = clock();
    Sleep(800);
    clockEnd = clock();
    printf("%d\n", clockEnd - clockBegin);

    //用timeGetTime()来计时,以毫秒为单位
    DWORD  dwBegin, dwEnd;
    dwBegin = timeGetTime();
    Sleep(800);
    dwEnd = timeGetTime();
    printf("%d\n", dwEnd - dwBegin);

    //用GetTickCount()来计时,以毫秒为单位
    DWORD  dwGTCBegin, dwGTCEnd;
    dwGTCBegin = GetTickCount();
    Sleep(800);
    dwGTCEnd = GetTickCount();
    printf("%d\n", dwGTCEnd - dwGTCBegin);

    //用QueryPerformanceCounter()来计时,以微秒为单位
        //由于QueryPerformanceCounter()函数本质上是获取程序运行期间所经过的时钟周期数(对于程序线程),
        //所以在读取到时钟周期数后,需要再利用时钟主频进行进一步的转化求解。
    LARGE_INTEGER li, freq;
	long long f_time;
	QueryPerformanceCounter(&li);
	long long f_start = li.QuadPart;
	QueryPerformanceFrequency(&freq);   //取得当前线(进)程的时钟主频
	Sleep(800);
	QueryPerformanceCounter(&li);
	long long f_end = li.QuadPart;
	printf("%d\n", (f_end - f_start)*1000000/freq.QuadPart);
    
    return 0;
}

你可能感兴趣的:(C/C++)