文章作者:里海
来源网站:https://blog.csdn.net/WangPaiFeiXingYuan
简介
c++多线程
时间
c语言的时间处理:time.h
获取从1970年1月1日到当前经过的秒数:
long t0 = time(NULL);
让程序暂停3秒:
sleep(3);
当前时间的3秒后:
long t1 = t0 + 3;
可见c语言没有时间类型的区分,容易导致单位错误和混淆时间点和时间段。再比如t0*3,乘法对时间点而言是无意义的,但是c语言将他看作是long类型,允许时间点的乘法,容易让程序员犯错。
c++从第11个版本就将时间标准化了,c++11引入了时间标准库。
c++11语言的时间处理:引入时间标准库std::chrono
该库明确区分时间点和时间段,明确区分不同的时间单位。时间点是指一个具体的时间,如2023年6月13日20点48分10秒;时间段是指时间的长度,如1分30秒。在该库中,时间点类型为chrono::steady_clock::time_point等,时间段类型为:chrono::milliseconds(毫秒)、chrono:seconds(秒)、chrono::minutes(分钟)等。
该库方便了时间的运算符重载,如时间点加上时间段等于新的时间点,时间点减去另一个时间点等于时间段。
可以使用chrono::steady_clock::now()获取当前时间点,使用时间点加上时间段可以得到新的时间点,使用两个时间点相减可以得到时间段,然后可以使用duration_cast将时间段转换为不同的时间单位,如转换为秒数。整体来看,std::chrono库提供了方便、易用的时间处理功能,下面是例子。
获取当前时间点
auto t0 = std::chrono::steady_clock::now();
当前时间点的30秒后
auto t1 = t0 + std::chrono::seconds(30);
获取两个时间点的差(时间段)
auto dt = t1 - t0;
获取时间差的秒数
int64_t sec = std::chrono::duration_cast<std::chrono::seconds>(dt).count();
计算程序运行花费的时间,例如下面计算第7行程序运行的时间微秒数
使用double类型,提高精度,返回带小数点的微秒数
std::this_thread::sleep_for可跨平台,可以指定单位,例如:暂停400微妙