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


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

  • 相关阅读:
    生成全局id的方式
    如何使得搜索的信息更准确?
    水平分区
    大表如何优化?
    MySQL_fetch_array和MySQL_fetch_object的区别是什么?
    BLOB和TEXT区别
    如何在Unix和MySQL时间戳之间进行转换?
    用ActionSupport实现验证
    服务器端验证--验证框架验证required.
    自定义类型转换器converter
  • 原文地址:https://www.cnblogs.com/joeblackzqq/p/1872213.html
Copyright © 2020-2023  润新知