有时候在做项目的时候经常要遇计算耗时,这些需要自己写一个计算时间的类,前几天看了点资料,比较简单的c++中来写Time类的方法在后面写出来啦!
顺便经常在项目中需要自己写个Log类,里面打Log,来判断什么时间发生的crash,或者来判断发生操作的时间,在代码的最后也写出来调用windows.h的方便的办法!
代码如下:
#include<ctime>
#include<conio.h>
#include"time.h"
#include<iostream>
#include<cstdio>
#include <Windows.h>
using namespace std;
class Time{
private:
char* name;
double begin;
double end;
public:
Time(char*);
Time(clock_t, char*);
~Time();
void start();
void stop();
void show();
};
//Time.cpp 成员函数定义
Time::Time(char* pName)
{
name=new char[strlen(pName)+1];
cout << "创建对象" << pName<< "开始计时..." << endl;
strcpy(name, pName); //初始化类对象名
begin = end = 0.0; //初始化数据成员begin和end
}
Time::Time(clock_t t, char* pName)
{
name=new char[strlen(pName)+1];
cout << "创建对象" << pName<< "开始计时..." << endl;
strcpy(name, pName); //初始化类对象名
begin = (double)t / CLOCKS_PER_SEC;
end = 0.0;
}
Time::~Time()
{
cout << "析构Time类对象" << name << endl;
delete[] name;
}
void Time::start()
{
begin = (double)clock() / CLOCKS_PER_SEC;
}
void Time::stop()
{
end = (double)clock() / CLOCKS_PER_SEC;
show();
}
void Time::show()
{
cout << "开始时间为:"<< begin << "秒"<<endl;
cout << "结束时间为:"<< end<< "秒"<<endl;
cout << "消耗的时间为:"<< (end - begin) << "秒"<<endl;
}
//主函数
void main()
{
Time time1("t1");
time1.start();
Sleep(1000);
time1.stop();
//Creat object using initial value
Time time2(clock(), "t2");
Sleep(1000);
time2.stop();
//利用windows.h来获取系统时间,再计算耗时,时间上的损失较大
SYSTEMTIME sysTime1;
SYSTEMTIME sysTime2;
GetLocalTime( &sysTime1 );
Sleep(1000);
GetLocalTime( &sysTime2 );
cout<<(sysTime2.wSecond-sysTime1.wSecond)<<'.'<<(sysTime2.wMilliseconds-sysTime1.wMilliseconds)<<endl;
cout<<sysTime1.wHour<<':'<<sysTime1.wMinute<<':'<<sysTime1.wSecond<<endl;
}
其中:
1.clock():
clock()是C/C++中的计时函数,而与其相关的
数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
clock_t clock(void) ;
简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的
数据类型。
2.CLOCKS_PER_SEC:
它用来表示一秒钟会有多少个时钟计时单元,其定义如下:
#define CLOCKS_PER_SEC ((clock_t)1000)
可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。
可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间。