C++11中新引入了std::chrono
库,由此可以较为容易的实现一个计时器。同时,休眠操作也可以通过这个库来实现,从而使代码有良好的跨平台性,避免使用Windows/Linux的系统休眠函数。
在接下来的网络编程学习中,将引入该计时器,实现对每秒收包、连接等数据的计数显示。
本篇学习记录使用的语言为C++,调用的库为C++11里的std::chrono
库。
一、简易的计时器类
mytimer.hpp
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #ifndef MY_TIMER_H_ #define MY_TIMER_H_
#include<chrono>
class mytimer { private: std::chrono::steady_clock::time_point _begin; std::chrono::steady_clock::time_point _end; public: mytimer() { _begin = std::chrono::steady_clock::time_point(); _end = std::chrono::steady_clock::time_point(); } virtual ~mytimer(){}; void UpDate() { _begin = std::chrono::steady_clock::now(); }
double GetSecond() { _end = std::chrono::steady_clock::now(); std::chrono::duration<double> temp = std::chrono::duration_cast<std::chrono::duration<double>>(_end - _begin); return temp.count(); } };
#endif
|
测试该计时器的代码示例 main.cpp
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include"mytimer.hpp" #include<iostream>
int main() { mytimer _time; _time.UpDate(); for(int n=0;n<100000000;n++) { } std::cout<<_time.GetSecond(); return 0; }
|
二、基于chrono库的休眠
使用方法如下:
1 2
| std::chrono::milliseconds t(1); std::this_thread::sleep_for(t);
|