c++的时钟
#include<chrono>
#include <iostream>
#include<ctime>
#include<iomanip>
#include<thread>
using namespace std;
/*
* clock都有的静态成员函数:
* static time_point now() //get current time
* static __time64_t to_time_t(const time_point& _Time)//显示成正常时间需要做的事
* static time_point from_time_t(__time64_t _Tm) noexcept {//convert from __time64_t,就是反过来把time_t变为time_point
*
*
*
*
*
system_clock:获取当前时间点(time_point),新世纪计数。想要获得正常的时间显示,要手动转化为time_t才能显示
steady_clock:计时的(常用于游戏里计时),类似于秒表
high_resolution_clock:(高精度时钟)获取的值比system_clock更精准
(记住,以上三个都是一个 类 )
*/
void testsystem_clock()
{
chrono::system_clock::time_point reslut=chrono::system_clock::now();//获取当前时间
// 结构体 里有 类
//接下来,把time_point 转化为 time_t
time_t tm = chrono::system_clock::to_time_t(reslut);
//c语言打印
cout << ctime(&tm) << endl;
//转换为tm类型,再通过c++输出时间函数打印时间
//包含 iomanip 头文件
std::tm* p = localtime(&tm);
cout << "格式化打印:" <<put_time(p,"%F %x") << endl;//%F 出来的是 - ;%x 出来的是 /
cout << "格式化打印:" << put_time(p, "%F %T") << endl;//记住中间put_time的“% %”为显示的格式参数
//获取时间戳,实质上就是获取时间间隔。时间戳:距离1970年有多少秒
cout << "count:" << reslut.time_since_epoch().count() << endl;
}//系统时钟
//对时间计时,类似于时间进度条
//void teststeady_clock()
//{
// chrono::steady_clock::time_point star = chrono::steady_clock::now();
// int i = 0;
// while (i<100)
// {
// chrono::steady_clock::time_point end = chrono::steady_clock::now();
// auto time = end - star;
// cout << "耗时:" << time.count() << "ns" << endl;//此处是一直显示计时的方法
//
// }
//}
void teststeady_clock1()
{
chrono::steady_clock::time_point star = chrono::steady_clock::now();
int i = 0;
this_thread::sleep_for(1s);//在这沿用了线程方法
chrono::steady_clock::time_point end = chrono::steady_clock::now();
auto time = end - star;
cout << "耗时:" << time.count() << "ns" << endl;
chrono::duration<double, ratio<1>> Result = end - star;//用duration来转换
cout << "耗时:" << Result.count() << "s" << endl;
}
void testhigh_resolution()
{
chrono::high_resolution_clock::time_point star = chrono::high_resolution_clock::now();
//high_resolution_clock-----转到定义一看,会发现其实是别名,但是.....用这个运行结果还是好一点的,应该是now那个地方的计时方式做了更改
int i = 0;
this_thread::sleep_for(1s);
chrono::high_resolution_clock::time_point end = chrono::high_resolution_clock::now();
auto time = end - star;
cout << "耗时:" << time.count() << "ns" << endl;
chrono::duration<double, ratio<1>> Result = end - star;//用duration来转换
cout << "耗时:" << Result.count() << "s" << endl;
}
int main()
{
//chrono::system_clock::now();
/testsystem_clock();
teststeady_clock1();
testhigh_resolution();
return 0;
}