您的位置:首页 > 编程语言 > C语言/C++

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

2010-12-12 19:43 831 查看
在我们编写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中,该结构体存在与<windows.h>中,其结构描述为:
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 <windows>
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: