C++ 中程序计时

C++ 进行程序计时的不同方式

C++ 获取系统日期与时间?

  • C++ 标准库没有提供所谓的日期类型。C++ 继承了 C 语言用于日期和时间操作的结构和函数
  • 为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 头文件
  • 获取当前系统的日期和时间,包括本地时间和协调世界时(UTC)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include 
    #include
    using namespace std;

    int main( )
    {
    // 基于当前系统的当前日期/时间
    time_t now = time(0);

    // 把 now 转换为字符串形式
    char* dt = ctime(&now);
    cout << "本地日期和时间:" << dt << endl;

    tm *ltm = localtime(&now);
    // 输出 tm 结构的各个组成部分
    cout << "年: "<< 1900 + ltm->tm_year << endl;
    cout << "月: "<< 1 + ltm->tm_mon<< endl;
    cout << "日: "<< ltm->tm_mday << endl;
    cout << "时间: "<< ltm->tm_hour << ":";
    cout << ltm->tm_min << ":";
    cout << ltm->tm_sec << endl;
    }

C++ 如何使用 clock () 函数统计程序运行时间?

  • clock () 是 C/C++ 中的计时函数

  • 用于统计程序从启动到函数调用占用 CPU 的时间, 即从 “开启这个程序进程” 到 “程序中调用 clock () 函数” 时之间的 CPU 时钟计时单元(clock tick)数,在 MSDN 中称之为挂钟时间(wal-clock);若挂钟时间不可取,则返回 - 1。其中 clock_t 是用来保存时间的数据类型

    1
    2
    3
    4
    5
    6
    7
    #include

    clock_t startTime,endTime;
    startTime = clock();
    //需要测试运行时间的程序段
    endTime= clock();
    cout << "Totle Time : " << (double)clock() /CLOCKS_PER_SEC<< "s" << endl;
  • 注意:当使用 sleep () 函数时,是不会统计 sleep 的时间的

C++ 如何使用 GetTickCount () 函数 统计程序运行时间?

  • GetTickCount 返回(retrieve)从操作系统启动所经过(elapsed)的毫秒数,它的返回值是 DWORD

    1
    2
    3
    4
    5
    6
    #include 

    DWORD start_time = GetTickCount();
    //需要测试运行时间的程序段
    DWORD end_time = GetTickCount();
    cout << "The run time is:" << (end_time - start_time) << "ms!" << endl;
  • 注意事项:(1) 若系统运行时间超过 49.71 天时,这个数就会归 0;(2) 这个函数并非实时发送,而是由系统每 18ms 发送一次,因此其最小精度为 18ms,当需要有小于 18ms 的精度计算时,应使用 StopWatch 方法进行

C++ 如何使用 QueryPerformanceCounter () 函数 统计程序运行时间?

  • 返回高精确度性能计数器的值,它可以以微妙为单位计时
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include  

    LARGE_INTEGER t1,t2,tc;
    QueryPerformanceFrequency(&tc);
    QueryPerformanceCounter(&t1);
    //需要测试运行时间的程序段
    QueryPerformanceCounter(&t2);
    time=(double)(t2.QuadPart-t1.QuadPart)/(double)tc.QuadPart;
    cout<<"time = "<

C++ 如何使用 gettimeofday () 函数 统计程序运行时间?

  • linux 环境下的计时函数,把目前的时间由 tv 所指的结构返回,当地时区的信息则放到 tz 所指的结构中
    1
    2
    3
    4
    5
    6
    7
    8
    #include    //引入头文件
    struct timeval t1,t2;
    double timeuse;
    gettimeofday(&t1,NULL);
    //需要测试运行时间的程序段
    gettimeofday(&t2,NULL);
    timeuse = (t2.tv_sec - t1.tv_sec) + (double)(t2.tv_usec - t1.tv_usec)/1000000.0;
    cout<<"time = "<

C++ 如何使用 system_clock: : now () 函数统计程序运行时间?

1
2
3
4
5
6
7
8
9
10
#include
using namespace std;
using namespace chrono;

auto start = system_clock::now();
//需要测试运行时间的程序段
auto end = system_clock::now();
auto duration = duration_cast(end - start);
cout << double(duration.count()) * microseconds::period::num / microseconds::period::den
<< "s" << endl;