C++中一种对代码块计时的方法

发布时间:2024年01月23日

当我们写了一串逻辑代码后,如果尝试去计算某几行代码(以下称代码块)耗时,最普通的做法是记录代码块前和后的时间戳,然后计算时间戳的差值:

auto time_start = std::chrono::system_clock::now();
// code block
auto time_end = std::chrono::system_clock::now();
std::cout << "time cost: " << std::chrono::duration_cast<std::chrono::milliseconds>(time_cuting - time_readimg).count() << "ms" << std::endl;

如果我们的代码的流程较长,而想知道多个代码块的耗时,这种做法可能就不那么优雅了

利用作用域实现快捷计时

如果一个变量在作用域内被创建,那么在离开作用域时会被释放。如果一个类在作用域内被创建,那么在离开作用域时会调用析构函数,然后被释放。

如果是这样,那么可以设计一个计时类Timer。在作用域开始时创建,当离开作用域时,会自动调用析构函数。我们可以在创建的构造函数中记录时间戳,在析构函数中再次记录时间戳,然后计算输出两个之间戳的差值即可完成计时。

如果我们要对一个代码块计时,只需要将这个代码块放置在同一个作用域,并在最开始创建一个Timer对象即可。众所周知,{ }就可以创建一个作用域,如下所示:

#include <iostream>
#include <timer.h>

int main(int argc, char *argv[])
{

    {   // 直接创建作用域,但是不影响上下代码逻辑
        Timer timer("block 1 costtime");
        int a = 1;
        int b = 2;
    }

    float c = 3;

    return 0;
}

在进入作用域时,Timer将实例化对象调用构造函数开始计时,在退出作用域时,Timer被销毁调用析构函数计算并打印耗时时间。

所以统计任意代码块的耗时都可以用{ }封装起来,再实例化一个Timer即可。

文章来源:https://blog.csdn.net/qq_40243750/article/details/135744461
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。