c++11 日期和时间工具-(std::chrono)
std::chrono是C++11引入的日期时间处理库,其中包含3种时钟:定义于头文件
·
std::chrono是C++11引入的日期时间处理库,其中包含3种时钟:
system_clock,steady_clock,high_resolution_clock。
定义于头文件 <chrono>
std::chrono
库
system_clock
steady_clock
本质
秒表,和系统时间无关;
每一次重启线程,都会重新计时,并不会因为重来所获得的时间比之前获取的时间大。
std::chrono::steady_clock::time_point tp1=std::chrono::steady_clock::now();
std::cout<<"1970.1.1-----now:"<<tp1.time_since_epoch().count()<<std::endl;
int i=100;
while(i) i--;
std::chrono::steady_clock::time_point tp2=std::chrono::steady_clock::now();
std::chrono::duration<double> dur=tp2-tp1;
std::cout<<"time duratino="<<dur.count()<<std::endl;
high_resolution_clock
获取的时间精度比steady_clock更高。
std::chrono::time_point<>
类模板,记录的是三种时钟的一种返回的时间点。
第一种使用方法:
#include <iostream>
#include <chrono>
int main()
{
std::chrono::steady_clock::time_point t1 = std::chrono::system_clock::now();
std::cout << "Hello World\n";
std::chrono::steady_clock::time_point t2 = std::chrono:: system_clock::now();
std::cout << (t2-t1).count()<<” tick count”<<endl;
}
第二种使用方法:
#include <iostream>
#include <chrono>
int main()
{
std::chrono::time_point<std::chrono::steady_clock> t1 = std::chrono::system_clock::now();
std::cout << "Hello World\n";
std::chrono::time_point<std::chrono::steady_clock> t2 = std::chrono:: system_clock::now();
std::cout << (t2-t1).count()<<” tick count”<<endl;
}
time_point的单位
每一次调用time_point都是记录一次从1970年1月1日到现在的秒数---错。
单位:纳秒;
精度:纳秒
std::chrono::duration<>
记录时钟的时间间隔,
#include <iostream>
#include <vector>
#include <numeric>
#include <chrono>
volatile int sink;
int main()
{
for (auto size = 1ull; size < 1000000000ull; size *= 100)
{
// 记录开始时间
auto start = std::chrono::steady_clock::now();
// 做一些工作
std::vector<int> v(size, 100);
sink = std::accumulate(v.begin(), v.end(), 0u);
// 记录结束时间
auto end = std::chrono::steady_clock::now();
std::chrono::duration<double> diff = end - start;
std::cout << std::fixed << "Time to fill and iterate a vector of "
<< size << " ints : " << diff.count() << " s\n";
}
}
duration<>的时间单位
template<class _Rep, class _Period = ratio<1> > class duration;
第一个参数是用来表示用什么数据类型来记录存储的时间值;
第二个参数是时间的单位,默认为1秒,可以通过设置ratio<>模板中的参数设置时间单位:
- chrono::duration<int,ratio<60>> two_minutes(2); //60就是一分钟
- chrono::duration<int,ratio<1,1000>> two_milliseconds(2); //1/1000=0.001,时间单位1毫秒
- chrono::duration<int,ratio<60 * 60 * 24>> two_days(2);
所以,下面的程序打印出来的默认就是以秒为单位的时间:
#include <iostream>
#include <vector>
#include <numeric>
#include <chrono>
volatile int sink;
int main()
{
for (auto size = 1ull; size < 1000000000ull; size *= 100)
{
// 记录开始时间
auto start = std::chrono::steady_clock::now();
// 做一些工作
std::vector<int> v(size, 100);
sink = std::accumulate(v.begin(), v.end(), 0u);
// 记录结束时间
auto end = std::chrono::steady_clock::now();
std::chrono::duration<double> diff = end - start;
std::cout << std::fixed << "Time to fill and iterate a vector of "
<< size << " ints : " << diff.count() << " s\n";
}
}
end-start--------单位为ms,毫秒;
std::chrono::duration-----默认的单位为s,秒。
time_since_epoch().count()
显示时间点的时间
std::chrono::steady_clock::now(); // 纳秒
uint64_t ui64MicroSecondsTp = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count(); // 微秒
uint64_t ui64MilliSecondsTp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count(); // 毫秒
微秒,毫秒,纳秒
microseconds, milliseconds, nanoseconds
时间单位转换--duration_cast
#include <iostream>
#include <chrono>
#include <thread>
int main()
{
auto start = std::chrono::steady_clock::now();
std::this_thread::sleep_for(std::chrono::seconds(1));
auto end = std::chrono::steady_clock::now();
std::cout << "Time spent--ns: " << (end - start).count() << std::endl;
std::cout << "Time spent--ms: " << std::chrono::duration_cast<std::chrono::milliseconds>((end - start)).count() << std::endl;
return 0;
}
sleep
sleep
头文件:#include <unistd.h>
在unix上单位是毫秒,在windows上单位是秒;
sleep_for
头文件:#include <thread>
怎么利用sleep设置各种单位时间--sleep_for
更多推荐
已为社区贡献6条内容
所有评论(0)