在编写程序时,有时需要准确测量一个算法的运行时间,以做到对某一特定的数据集,不同算法耗时的比较。
题主今天在编写算法课实验代码的时候,大致在网上搜索了下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;
}