【C++】不破坏原程序结果的毫秒级计时器

1.传统定时器

适用于在一个函数内需要分段计时的情况;

#include <iostream>
#include <chrono>
#include <thread>

using namespace std;

int main()
{
    auto start = chrono::steady_clock::now();
    //模拟程序运行用时
    this_thread::sleep_for(chrono::milliseconds(2000));
    
    auto end = chrono::steady_clock::now();
    auto duration = chrono::duration_cast<chrono::milliseconds>(end - start);
    cout << duration.count() << "ms" << endl;
    return 0;
}

2.传统计时器的宏改

这种方法适用于程序连续计时:其中TIME_START只能出现一次

#define TIME_START \
    std::chrono::time_point<std::chrono::system_clock> start, finish; \
    chrono::duration<double, milli> elapsed_time; \
    start = chrono::system_clock::now();

#define TIME_END \
    finish = chrono::system_clock::now(); \
    elapsed_time = finish - start; \
    start = chrono::system_clock::now(); \
    cout << "Time used: " << elapsed_time.count() << "ms" << endl;

3.装饰器模式的计时器

使用lambda函数进行包装计时

#include <iostream>
#include <chrono>
#include <ctime>
#include <functional>

using namespace std;

class Timer
{
public:
    Timer(function<void()> func)
        :func_(func)
    {
    }

    void operator()()
    {
        auto start = chrono::system_clock::now();
        func_();
        auto end = chrono::system_clock::now();
        chrono::duration<double, milli> elapsed_time = end - start;
        cout << "elapsed time: " << elapsed_time.count() << " ms" << endl;
    }

private:
    function<void()> func_;
};
//在调用处:
int main()
{
    // 包装被计时函数
    Timer t([&](){
        cout << "do something..." << endl;
    });
    // 调用被计时函数
    t();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颢师傅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值