C++中程序运行时间的计算

      在我们编写C++程序的时候,特别是在做算法测试的时候,这是就需要计算程序的运行时间,已测试程序效率的优劣。为此,以下我们就讨论几种方法。

 

法一: 使用clock()

      C++程序运行时间中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下

#ifndef _CLOCK_T_DEFINED

typedef long  clock_t; 

#define _CLOCK_T_DEFINED

#endif

    这个函数返回从开启这个程序进程程序中调用clock()函数时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在time.h文件中,我们可以找到对 它的定义

#ifndef _CLOCK_T_DEFINED

typedef long  clock_t; 

#define _CLOCK_T_DEFINED

#endif

     很明显,clock_t是一个长整形数。

     在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:

 

int main(void) { long i = 10000000L; clock_t start, finish; double duration; /*测量一个事件持续的时间*/ printf("Time to do %ld empty loops is ", i); start = clock(); while(i--); finish = clock(); duration = (double)(finish - start)/CLOCKS_PER_SEC; printf("%f seconds", duration); system("pause"); }

 

法二:windows系统时间--SYSTEMTIME

       该结构顾名思义表示系统当前的时间,其为windows系统提供,故仅可用于windows操作系统中。

在MSDN中,该结构体存在与中,其结构描述为:

typedef struct _SYSTEMTIME { WORD wYear; // The current year. WORD wMonth; // The current month; January is 1. WORD wDayOfWeek; // The current day of the week; Sunday is 0, Monday is 1, and so on. WORD wDay; // The current day of the month. WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; // The current millisecond. } SYSTEMTIME, *LPSYSTEMTIME;

 

具体获取系统时间的方法为:

#include using namespace std; void main() { SYSTEMTIME sys; GetLocalTime(&sys); int year = sys.wYear; int month = sys.wMonth; }

 

法三:GetTickCount()

        GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。

        函数原型:  DWORD GetTickCount(void);

      使用实例:

  CString s;   DWORD k=::GetTickCount(); //获取毫秒级数目   int hm=k/3600000; //hm为小时数   int ms=(k-3600000*hm)/60000; //ms为分钟数   int se=(k-3600000*hm-60000*ms)/1000; //se为秒数(除以1000是因为k精确到毫秒)   s.Format("%d:%d:%d",hm,ms,se); //输出时、分、秒   库文件:kernl32.dll   C/C++头文件:winbase.h   windows程序设计中可以使用头文件windows.h

   使用时可类似如下写法:

DWORD stime = GetTickCount();

... ...

DWORD etime = GetTickCount();

long time = etime - stime;        // 单位:ms

你可能感兴趣的:(C/C++,c++,windows,loops,测试,struct,360)