龙马谷

 找回密码
 立即注册

QQ登录

只需一步,快速开始

龙马谷VIP会员办理客服QQ:82926983(如果临时会话没有收到回复,请先加QQ好友再发。)
1 [已完结] GG修改器新手入门与实战教程 31课 2 [已完结] GG修改器美化修改教程 6课 3 [已完结] GG修改器Lua脚本新手入门教程 12课
4 [已完结] 触动精灵脚本新手入门必学教程 22课 5 [已完结] 手游自动化脚本入门实战教程 9课 6 [已完结] C++射击游戏方框骨骼透视与自瞄教程 27课
7 [已完结] C++零基础UE4逆向开发FPS透视自瞄教程 29课 8 [已完结] C++零基础大漠模拟器手游自动化辅助教程 22课 9 [已完结] C++零基础开发DXF内存脚本辅助教程 32课
以下是天马阁VIP教程,本站与天马阁合作,赞助VIP可以获得天马阁对应VIP会员,名额有限! 点击进入天马阁论坛
1 [已完结] x64CE与x64dbg入门基础教程 7课 2 [已完结] x64汇编语言基础教程 16课 3 [已完结] x64辅助入门基础教程 9课
4 [已完结] C++x64内存辅助实战技术教程 149课 5 [已完结] C++x64内存检测与过检测技术教程 10课 6 [已完结] C+x64二叉树分析遍历与LUA自动登陆教程 19课
7 [已完结] C++BT功能原理与x64实战教程 29课 8 [已完结] C+FPS框透视与自瞄x64实现原理及防护思路
查看: 7908|回复: 0

C++获取程序执行时间的五个方法对比

[复制链接]

13

主题

1

回帖

18

积分

编程入门

Rank: 1

龙马币
36

五种获取C/C++程序执行时间的方法对比如下:

核心函数                                   头文件        函数库      精度     准确度
QueryPerformanceCounter        windows.h      API           us       非常准确
GetTickTount                          windows.h       API          ms       准确
clock                                         time.h          C函数      ms        较准确
time                                          time.h          C函数       s         很准确
ftime                                      sys/timeb.h     C函数       ms       较准确

在windows平台下建议使用GetTickCount,当对精度和准确度要求高可以用QueryPerformanceCounter,Linux平台下建议使用ftime,
本程序均在windows平台下运行,五种获取程序执行时间的代码如下:

  1. #include <iostream>  
  2. #include <fstream>  
  3. #include <ctime>  
  4. #include <windows.h>  
  5. #include <tchar.h>  
  6. #include <sys/timeb.h>  
  7. #include <time.h>  
  8. #include <cmath>  
  9. #include <stdio.h>  
  10.   
  11. using namespace std;  

  12. /**************************获取系统时间*************************/  
  13. void MyGetSystemTime()  
  14. {  
  15.     SYSTEMTIME currentTime;  
  16.     GetSystemTime(¤tTime);  
  17.     printf("time: %u/%u/%u %u:%u:%u:%u %d\n",   
  18.         currentTime.wYear,currentTime.wMonth,currentTime.wDay,   
  19.         currentTime.wHour,currentTime.wMinute,currentTime.wSecond,   
  20.         currentTime.wMilliseconds,currentTime.wDayOfWeek);  
  21. }  

  22.   
  23. /****************自己实现的定时器,要比Sleep准确****************/  
  24. void MySleep(DWORD dwMilliseconds)  
  25. {  
  26.     LARGE_INTEGER litmp;  
  27.     LONGLONG QPart1;  
  28.     QueryPerformanceCounter(&litmp);  
  29.     QPart1 = litmp.QuadPart;//获得初始值  
  30.   
  31.     LONGLONG QPart2;  
  32.     double dfMinus, dfFreq, dfTim;  
  33.     QueryPerformanceFrequency(&litmp);  
  34.     dfFreq = (double)litmp.QuadPart;//获得计数器的时钟频率  
  35.   
  36.     do  
  37.     {  
  38.         QueryPerformanceCounter(&litmp);  
  39.         QPart2 = litmp.QuadPart;//获得中止值  
  40.         dfMinus = (double)(QPart2-QPart1);  
  41.         dfTim = dfMinus / dfFreq * 1000;//获得对应的时间值,单位为毫秒  
  42.     }while(dfTim < dwMilliseconds);  
  43. }  
  44.   
  45. int main()  
  46. {  

  47. /**************QueryPerformanceCounter(),windows.h,API,us****************///精度最高  
  48.      LARGE_INTEGER nFreq;  
  49.      LARGE_INTEGER nBeginTime;  
  50.      LARGE_INTEGER nEndTime;  
  51.   
  52.      double time;  
  53.      QueryPerformanceFrequency(&nFreq);  
  54.      QueryPerformanceCounter(&nBeginTime);   
  55.      Sleep(1000);  
  56.      QueryPerformanceCounter(&nEndTime);  
  57.   
  58.      time=(double)(nEndTime.QuadPart-nBeginTime.QuadPart)/(double)nFreq.QuadPart;  
  59.      printf("%f\n",time);  
  60.   

  61. /**************GetTickCount(),windows.h,API,ms****************///首选  
  62.     DWORD start, end;  
  63.     start = GetTickCount();  
  64.     MySleep(1000);  
  65.     end = GetTickCount();  
  66.     printf("time: %d ms\n", end - start);  
  67.   

  68. /**************clock(),time.h,C函数,ms,不太准****************/  
  69.     clock_t start, end;  
  70.     start = clock();  
  71.     Sleep(1000);  
  72.     end = clock();  
  73.     printf("time: %d ms\n", end - start);  
  74.   

  75. /**************time(),time.h,C函数,s****************/  
  76.     time_t start, end;  
  77.     start = time(NULL);  
  78.     Sleep(1000);  
  79.     end = time(NULL);  
  80.     printf("time: %d ms\n", end - start);  
  81.   

  82. /**************ftime(),sys/timeb.h,C函数,ms,不太准****************/  
  83.     struct timeb startTime , endTime;  
  84.     ftime(&startTime);  
  85.     Sleep(1000);  
  86.     ftime(&endTime);  
  87.     printf("time: %d ms\n", (endTime.time-startTime.time)*1000 + (endTime.millitm - startTime.millitm));  
  88.     return 0;  
  89. }
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

龙马谷| C/C++辅助教程| 安卓逆向安全| 论坛导航| 免责申明|Archiver|
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表龙马谷立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2018-2021 All Right Reserved.
在线客服
快速回复 返回顶部 返回列表