C++中如何记录程序运行时间

一、clock()计时函数
clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
clock_t clock(void) ;
简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的数据类型。
在time.h文件中,我们可以找到对clock_t()的定义:

#ifndef _CLOCK_T_DEFINED

typedef long clock_t;

#define _CLOCK_T_DEFINED
#endif

很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:
#define CLOCKS_PER_SEC ((clock_t)1000)

注:我是用的CodeBlocks查看的定义,需要软件的请后台留言。

下面来看测试代码:

 1 //计算一段程序运行的时间
 2 #include<iostream>
 3 #include<ctime>
 4 using namespace std;
 5 int main()
 6 {
 7     clock_t startTime,endTime;
 8     startTime = clock();//计时开始
 9     for (int i = 0; i < 2147483640; i++)
10     {
11         i++;
12     }
13     endTime = clock();//计时结束
14     cout << "The run time is: " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
15     system("pause");
16     return 0;
17 }
18 //注释在:VC++6.0中可以用CLK_TCK替换CLOCKS_PER_SEC。
 1 //计算整个程序运行的时间
 2 #include<iostream>
 3 #include<time.h>
 4 using namespace std;
 5 int main()
 6 {
 7     for (int i = 0; i < 2147483640; i++)
 8     {
 9         i++;
10     }
11     cout << "The run time is:" << (double)clock() /CLOCKS_PER_SEC<< "s" << endl;
12     system("pause");
13     return 0;
14 }

两个写在一起

 1 #include<iostream>
 2 #include<ctime>
 3 using namespace std;
 4 int main()
 5 {
 6     clock_t startTime,endTime;
 7     for (int i = 0; i < 2147483640; i++)
 8     {
 9         i++;
10     }
11     startTime = clock();//计时开始
12     for ( i = 0; i < 2147483640; i++)
13     {
14         i++;
15     }
16     endTime = clock();//计时结束
17     cout << "The run time is:" <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
18     cout << "The run time is:" << (double)clock() /CLOCKS_PER_SEC<< "s" << endl;
19     system("pause");
20     return 0;
21 }

程序运行结果如下:

我用了两个一样的for循环,可以看出程序种的运行时间差不多是一个循环的两倍。

二、GetTickCount()函数

GetTickCount是一种函数。GetTickCount返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD。
函数原型:
DWORD GetTickCount(void);
头文件:
C/C++头文件:winbase.h
windows程序设计中可以使用头文件windows.h

下面来看测试代码:

 1 #include<iostream>
 2 #include<Windows.h>
 3 using namespace std;
 4 int main()
 5 {
 6     DWORD startTime = GetTickCount();//计时开始
 7     for (int i = 0; i < 2147483640; i++)
 8     {
 9         i++;
10     }
11     DWORD endTime = GetTickCount();//计时结束
12     cout << "The run time is:" << endTime - startTime << "ms" << endl;
13     system("pause");
14     return 0;
15 }

注意事项:
GetTickcount函数:它返回从操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间,其函数原型是DWORD GetTickCount(void),返回值以32位的双字类型DWORD存储,因此可以存储的最大值是(2^32-1) ms约为49.71天,因此若系统运行时间超过49.71天时,这个数就会归0,MSDN中也明确的提到了:"Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days."。因此,如果是编写服务器端程序,此处一定要万分注意,避免引起意外的状况。

特别注意:这个函数并非实时发送,而是由系统每18ms发送一次,因此其最小精度为18ms。当需要有小于18ms的精度计算时,应使用StopWatch方法进行。
用clock()函数计算运行时间,表示范围一定大于GetTickCount()函数,所以,建议使用clock()函数。

两种函数功能一样,这就看自己的取舍。

原文地址:https://www.cnblogs.com/didiaodidiao/p/9194702.html

时间: 2024-10-11 10:48:52

C++中如何记录程序运行时间的相关文章

C#记录程序运行时间记录显示

//引入命名空间            using System.Diagnostics;            //清空导入时间 lbImportTime.Text = ""; //开始记录时间 Stopwatch myWatch = Stopwatch.StartNew(); //记录运行时间 //==================== //停止记录时间 myWatch.Stop(); //显示运行时间 lbImportTime.Text = myWatch.ElapsedMil

Processing中如何记录Sketch运行时间

在调试算法的时候,经常会碰到效率的问题,尤其是百万量级以上,或者是大数据.区块链相关创作的时候,那么就需要用一种方法来测试Sketch的运行时间,从而判断作品运行效率的优劣. 方法如下: long startTime, endTime; void setup() { size(200, 200); //设定初始时间 startTime = System.currentTimeMillis(); } void draw() { //绘制1万个随机点 for (int i=0; i<10000; i

java中读取程序运行时间

第一种是以毫秒为单位计算的. Java代码 //伪代码 long startTime=System.currentTimeMillis();   //获取开始时间 doSomeThing();  //测试的代码段 long endTime=System.currentTimeMillis(); //获取结束时间 System.out.println("程序运行时间: "+(end-start)+"ms"); //伪代码 long startTime=System.c

【转】c++ 获取程序运行时间

转自:http://blog.csdn.net/ghevinn/article/details/22800059 DWORD start_time=GetTickCount(); {...} DWORD end_time=GetTickCount(); DWORD Subtime = (end_time-start_time); int k = 0; 如何获取代码运行时间 在调试中,经常需要计算某一段代码的执行时间,下面给出两种常用的方式: 第一种:使用GetTickCount函数 #inclu

VC++程序运行时间测试函数

0:介绍 我们在衡量一个函数运行时间,或者判断一个算法的时间效率,或者在程序中我们需要一个定时器,定时执行一个特定的操作,比如在多媒体中,比如在游戏中等,都会用到时间函数.还比如我们通过记录函数或者算法开始和截至的时间,然后利用两者之差得出函数或者算法的运行时间.编译器和操作系统为我们提供了很多时间函数,这些时间函数的精度也是各不相同的,所以,如果我们想得到准确的结果,必须使用合适的时间函数.现在我就介绍windows下的几种常用时间函数. 1:Sleep函数 使用:sleep(1000),在W

1026. 程序运行时间(15)

1026. 程序运行时间(15) 要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间.这个时间单位是clock tick,即"时钟打点".同时还有一个常数CLK_TCK,给出了机器时钟每秒所走的时钟打点数.于是为了获得一个函数f的运行时间,我们只要在调用f之前先调用clock(),获得一个时钟打点数C1:在f执行完成后再调用clock(),获得另一个时钟打点数C2:两次获得的时钟打

linux 统计 程序 运行时间

测试 代码运行时间 linux 中的 <sys/time.h> 中 有个函数可以获取当前时间,精确到 微秒 ---->  gettimeofday() 1 #include <sys/time.h>       // int gettimeofday(struct timeval *tv, struct timezone *tz); 2 /********************************************* 3 * struct timeval 4 *

C# 使用Trace记录程序日志

在程序开发中,我们通常需要记录程序运行的状态,在程序部署后,发生的异常可以记录在日志中,便于发现程序潜在的问题.在.NET平台,有很多优秀的日志类库,例如Log4Net.如果程序很小,我们可以自己通过C#的Trace类来实现一个基本的日志记录功能.下面直接看代码: public class TraceHelper { private static TraceHelper _traceHelper; private TraceHelper() { } public static TraceHelp

C++程序运行时间-ZZ

http://www.cnblogs.com/houkai/archive/2013/06/06/3120768.html http://www.douban.com/note/224133728/ ------------------------------------------------------------------------------------ 在C++程序的性能分析中,其中重要的一项就是程序的运行时间.虽然程序的运行速度与计算机的配置.计算机的当前状态等有很大关系,但在相