[转]c++中计算运行时间 clock(),clock_t程序
class Time{
private:
char name[20];
double begin;
double end;
public:
Time(char* );
Time(clock_t,char* );
~Time();
void start();
void stop();
void show();
};
//Time.cpp 成员函数定义头文件(类的实现文件)
#include<iostream>
#include<ctime>
#include<cstring>
#include”time.h”
using namespace std;
Time::Time(char* pName)
{
cout << “创建Time类对象” << pName
<< “并开始计时…” << endl;
strncpy(name,pName,sizeof(name));//初始化字符数组name,赋值类对象名
name[sizeof(name-1)] = \’\0\’;//给字符数组最后一个元素赋值结束符
begin = end = 0.0;//初始化数据成员begin和end
}
Time::Time(clock_t t,char* pName)
{
cout << “创建Watch类对象” << pName
<< “并开始计时……” << endl;
strncpy(name,pName,sizeof(name));
name[sizeof(name)-1] = \’\0\’;
begin = (double)t / CLK_TCK;
end = 0.0;
}
Time::~Time()
{
cout << “析构Time类对象” << name << endl;
}
void Time::start()
{
begin = (double)clock() / CLK_TCK;
}
void Time::stop()
{
end = (double)clock() / CLK_TCK;
show();
}
void Time::show()
{
cout << “计时结束。\n消耗的时间为:”
<<(end – begin) << “秒\n\n\n”;
}
//main.cpp程序入口函数(主函数)
#include<ctime>
#include<conio.h>
#include”time.h”
#include<iostream>
#include<cstdio>
using namespace std;
void main()
{
Time s1(“s1”);
s1.start();
getche();
s1.stop();
//Creat object using initial value
Time s2(clock(),”s2″);
getche();
s2.stop();
//Creat object using initial value
Time s3(clock(),”s3″);
getche();
s3.stop();
}
运行结果:
创建Time类对象s1并开始计时…
计时结束。
消耗的时间为:1.046秒
创建Watch类对象s2并开始计时……
计时结束。
消耗的时间为:1.704秒
创建Watch类对象s3并开始计时……
计时结束。
消耗的时间为:1.234秒
析构Time类对象s3
析构Time类对象s2
析构Time类对象s1
Press any key to continue
程序对以下几点进行说明:
1.clock_t
2.clock();
3.CLK_TCK
1.clock_t是个数据类型,其实,当你打开time.h就知道了,就是个long型,用来记录一段时间内的clocks数,即CPU的运行单元时间。
time.h中的定义:typedef long clock_t;
2.clock函数定义如下:
clock_t clock(void) ;
clock()函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的数据类型
3.可以打开time.h看一下,定义如下:
*
Number of clock ticks per second. A clock tick is the unit by which
* processor time is measured and is returned by \’clock\’.
*/
#define CLOCKS_PER_SEC ((clock_t)1000.0)
#define CLK_TCK CLOCKS_PER_SEC
但是,CLK_TCK好像被淘汰了,msdn上写着:
The time in seconds is the value returned by the clock function, divided by CLOCKS_PER_SEC. CLK_TCK is equivalent, but considered obsolete.
CLOCKS_PER_SEC 表示一秒钟有多少个时钟计时单元(c/c++中的基本计时单位),可以看到每过千分之一秒(一毫秒),调用clock()函数返回的值就加一,
补充说明:
(1)该程序代码是在 C-Free 4.1 编译器下实现的(大家比较常用的应该是VC++ 6.0)。上面使用了getche()读取字符的方法,从键盘上读入一个回显字符(从键盘上敲的字母能在控制台上显示出来),这在VC 6.0中也一样。
(2)如果在 C-Free 4.1 编译器中用 getch(),读取字符是回显的,但是停顿(需要继续按回车)。而在VC++ 6.0中读入一个字符不回显(输入的字母不显示,就如上面的运行结果,并没有显示出字母),而且连贯运行。
(3)如果用getchar()的话两种编译器都是回显的,如同C-Free 的getch()。
不能说谁对谁错,编译器的问题,以后可能还会遇到很多这种情况,我自己觉得还是用VC,比较稳妥些,我在VC上安一个Visual assist X插件。但是C-Free相当的方便快捷,经常用,还用很多好的IDE,看个人所好了。