zoukankan      html  css  js  c++  java
  • C++中如何记录程序运行时间

    一、clock()计时函数
    clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下:
    clock_t clock(void) ;
    简单而言,就是该程序从启动到函数调用占用CPU的时间。这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回-1。其中clock_t是用来保存时间的数据类型。
    在time.h文件中,我们可以找到对clock_t()的定义:

    #ifndef _CLOCK_T_DEFINED

    typedef long clock_t;

    #define _CLOCK_T_DEFINED
    #endif

    很明显,clock_t是一个长整形数。在time.h文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:
    #define CLOCKS_PER_SEC ((clock_t)1000)

    注:我是用的CodeBlocks查看的定义,需要软件的请后台留言。

    下面来看测试代码:

     1 //计算一段程序运行的时间
     2 #include<iostream>
     3 #include<ctime>
     4 using namespace std;
     5 int main()
     6 {
     7     clock_t startTime,endTime;
     8     startTime = clock();//计时开始
     9     for (int i = 0; i < 2147483640; i++)
    10     {
    11         i++;
    12     }
    13     endTime = clock();//计时结束
    14     cout << "The run time is: " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
    15     system("pause");
    16     return 0;
    17 }
    18 //注释在:VC++6.0中可以用CLK_TCK替换CLOCKS_PER_SEC。
     1 //计算整个程序运行的时间
     2 #include<iostream>
     3 #include<time.h>
     4 using namespace std;
     5 int main()
     6 {
     7     for (int i = 0; i < 2147483640; i++)
     8     {
     9         i++;
    10     }
    11     cout << "The run time is:" << (double)clock() /CLOCKS_PER_SEC<< "s" << endl;
    12     system("pause");
    13     return 0;
    14 }

    两个写在一起

     1 #include<iostream>
     2 #include<ctime>
     3 using namespace std;
     4 int main()
     5 {
     6     clock_t startTime,endTime;
     7     for (int i = 0; i < 2147483640; i++)
     8     {
     9         i++;
    10     }
    11     startTime = clock();//计时开始
    12     for ( i = 0; i < 2147483640; i++)
    13     {
    14         i++;
    15     }
    16     endTime = clock();//计时结束
    17     cout << "The run time is:" <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
    18     cout << "The run time is:" << (double)clock() /CLOCKS_PER_SEC<< "s" << endl;
    19     system("pause");
    20     return 0;
    21 }

    程序运行结果如下:

    我用了两个一样的for循环,可以看出程序种的运行时间差不多是一个循环的两倍。

    二、GetTickCount()函数

    GetTickCount是一种函数。GetTickCount返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD。
    函数原型:
    DWORD GetTickCount(void);
    头文件:
    C/C++头文件:winbase.h
    windows程序设计中可以使用头文件windows.h

    下面来看测试代码:

     1 #include<iostream>
     2 #include<Windows.h>
     3 using namespace std;
     4 int main()
     5 {
     6     DWORD startTime = GetTickCount();//计时开始
     7     for (int i = 0; i < 2147483640; i++)
     8     {
     9         i++;
    10     }
    11     DWORD endTime = GetTickCount();//计时结束
    12     cout << "The run time is:" << endTime - startTime << "ms" << endl;
    13     system("pause");
    14     return 0;
    15 }

    注意事项:
    GetTickcount函数:它返回从操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间,其函数原型是DWORD GetTickCount(void),返回值以32位的双字类型DWORD存储,因此可以存储的最大值是(2^32-1) ms约为49.71天,因此若系统运行时间超过49.71天时,这个数就会归0,MSDN中也明确的提到了:"Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days."。因此,如果是编写服务器端程序,此处一定要万分注意,避免引起意外的状况。

    特别注意:这个函数并非实时发送,而是由系统每18ms发送一次,因此其最小精度为18ms。当需要有小于18ms的精度计算时,应使用StopWatch方法进行。
    用clock()函数计算运行时间,表示范围一定大于GetTickCount()函数,所以,建议使用clock()函数。

    两种函数功能一样,这就看自己的取舍。

     友情链接:Java中如何计算程序运行时间——》https://www.cnblogs.com/didiaodidiao/p/9249485.html 

  • 相关阅读:
    .net(关于字符串的相等问题[比较重要])
    .net(基本数据类型,枚举类型,枚举字符串的相互转化)
    如何安全的读入一个整数或者浮点数
    .net(数组)
    什么是EAI?
    PowerShell 入门
    sql server 2005 如何删除前几条记录或重复记录
    如何查看客户端的IP地址,机器名,MAC地址,登陆名等信息
    sql server 2005 几个常用的存储过程或函数
    ASP.NET 母版页的加载顺序
  • 原文地址:https://www.cnblogs.com/didiaodidiao/p/9194702.html
Copyright © 2011-2022 走看看