现在的位置: 首页 > 综合 > 正文

c++中计算运行时间 clock(),clock_t程序

2018年03月16日 ⁄ 综合 ⁄ 共 2547字 ⁄ 字号 评论关闭

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,看个人所好了。

转自:http://blog.sina.com.cn/s/blog_60be7ec80100gtdp.html

抱歉!评论已关闭.