总结一下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;
}
      
      
     
     
    
    
   
   

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值