c++11 新增了 std::chrono library 库
包含了三种时钟
system_clock 系统时钟
steady_clock 稳定时钟 (单调时钟) 绝不会调整的
high_resolution_clock 高分辨率时钟
三种结构体的主要参数
//部分源码/*** @brief System clock.** Time returned represents wall time from the system-wide clock.*/struct system_clock{typedef chrono::nanoseconds duration; //纳秒typedef duration::rep rep; //时钟类型typedef duration::period period; //时钟周期typedef chrono::time_point<system_clock, duration> time_point;//时间点};/*** @brief Monotonic clock** Time returned has the property of only increasing at a uniform rate.*/struct steady_clock{typedef chrono::nanoseconds duration;typedef duration::rep rep;typedef duration::period period;typedef chrono::time_point<steady_clock, duration> time_point;};/*** @brief Highest-resolution clock** This is the clock "with the shortest tick period." Alias to* std::system_clock until higher-than-nanosecond definitions* become feasible.*/using high_resolution_clock = system_clock;/*类似上一句*/typedef system_clock high_resolution_clock;
要想精确的计算出一个函数的运行时间.所选的时钟就不能因为部分外部因素影响(例如人为修改系统时间,或者修改硬件时钟)
当我们需要知道一个函数的执行时间的时候,只需要记录2个时间点.
例如startRunTime 和 endTime只需要记录2个时间点的差值就可以算来。
steady_clock 使用的是系统的单调时间,即从某个时间点开始到未来的时间。用户不能修改这个时间, 严格来说这个获取的 jiffies的值(为自操作系统启动以来的时钟滴答的数目)这里涉及到硬件知识.
#include <iostream>#include <chrono>using namespace std;class StopWatch {public:typedef std::chrono::steady_clock clock;//利用类的创建调用构造函数初始化一个是时间点StopWatch() : start(clock::now()) {}//获取开机到现在执行多少秒void startUptimeSec() {std::cout<<"开机多久="<<std::chrono::duration_cast<std::chrono::seconds>(start.time_since_epoch()).count()<<"秒"<<std::endl;}~StopWatch() {std::cout<<"运行时间="<<std::chrono::duration_cast<std::chrono::seconds>(clock::now() - start).count()<<"秒"<<std::endl;}long elapsedMs() {return std::chrono::duration_cast<std::chrono::milliseconds>(clock::now() - start).count();}private:clock::time_point start;};//巧妙的运用类的构造.与析构打印出开与结束时间
文章转载自游戏服务器学习,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




