c++ 计时

在C++中,有几种不同的方法可以计时程序的执行时间。这里是一些常见的方法:

1.使用 < chrono > 库

C++11 引入了 <chrono> 库,它提供了高精度的时间测量功能。

#include <iostream>
#include <chrono>

int main() {
    // 获取开始时间
    auto start = std::chrono::high_resolution_clock::now();

    // 执行一些代码
    // ...

    // 获取结束时间
    auto end = std::chrono::high_resolution_clock::now();

    // 计算经过的时间(以毫秒为单位)
    auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);

    std::cout << "Execution time: " << duration.count() << " ms\n";

    return 0;
}

2.使用 < ctime > 库

<ctime> 库提供了基于时间的函数,包括 clock(),但它不如 < chrono > 库精确。

#include <iostream>
#include <ctime>

int main() {
    // 获取开始时间
    std::clock_t start = std::clock();

    // 执行一些代码
    // ...

    // 获取结束时间
    std::clock_t end = std::clock();

    // 计算经过的时间(以毫秒为单位)
    double duration = (double)(end - start) / CLOCKS_PER_SEC * 1000;

    std::cout << "Execution time: " << duration << " ms\n";

    return 0;
}

std::clock() 返回的是程序执行的 CPU 时间,单位是“时钟周期”或“时钟滴答”。这并不是毫秒值。std::clock() 返回的类型是 std::clock_t,它是一个整数类型,其精确度和范围取决于具体的实现。

为了将 std::clock() 的返回值转换为毫秒,你需要知道 CLOCKS_PER_SEC 的值,这是一个在 头文件中定义的常量,表示每秒的时钟周期数。然后,你可以通过将 std::clock() 的返回值除以 CLOCKS_PER_SEC 来得到秒数,再乘以 1000 得到毫秒数。
std::clock() 提供的是 CPU 时间,而不是实际经过的墙钟时间(即实际流逝的时间)。这意味着,如果程序在等待 I/O 操作(如磁盘读写或网络通信)完成,那么这段时间不会计入std::clock() 的结果中,因为这些操作不会消耗 CPU 时间。如果你需要测量实际的经过时间,那么应该使用 <chrono> 库中的函数,如 std::chrono::high_resolution_clock::now()

3. 使用操作系统提供的API

在某些情况下,你可能需要使用特定于操作系统的API来获取更精确或更详细的时间信息。例如,在Windows上,你可以使用 QueryPerformanceCounter

#include <iostream>
#include <windows.h>

int main() {
    LARGE_INTEGER start, end, freq;

    // 获取计数器的频率
    QueryPerformanceFrequency(&freq);

    // 获取开始时间
    QueryPerformanceCounter(&start);

    // 执行一些代码
    // ...

    // 获取结束时间
    QueryPerformanceCounter(&end);

    // 计算经过的时间(以毫秒为单位)
    double duration = (end.QuadPart - start.QuadPart) / (double)freq.QuadPart * 1000.0;

    std::cout << "Execution time: " << duration << " ms\n";

    return 0;
}

注意事项
<chrono> 库是C++标准库的一部分,因此它是跨平台的。
<ctime> 库提供的时间精度通常较低,不适合需要高精度计时的应用。
使用操作系统特定的API(如 QueryPerformanceCounter)可以提供高精度的时间测量,但这样的代码通常是不可移植的。

根据你的具体需求,你可以选择最适合你的计时方法。在大多数情况下,<chrono> 库是最佳选择,因为它既提供了高精度的时间测量,又是跨平台的。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值