一、管理线程的四个方法
命名空间std::this_thread定义了四个管理当前线程的方法:
方法含义yield建议系统重新调度线程执行get_id返回当前线程的idsleep_for停止当前线程执行特定时间sleep_until停止当前线程直到特定时刻- yield 重新安排线程时间片,允许其他程序先执行
void yield() noexcept;
- get_id 返回当前线程的id
std::this_thread::id get_id() noexcept;
- sleep_for 暂停当前线程执行一段特定时间[1]
template
void sleep_for( const std::chrono::duration& sleep_duration );
- sleep_until 暂停当前线程直到某个时刻
template
void sleep_until( const std::chrono::time_point& sleep_time );
sleep和yield的区别和联系:
- sleep和yield都是主动让出时间片
- sleep让出固定时间,让其他线程有机会执行;
- yield让出时间,时间长度取决于系统调度策略;
- sleep让出的粒度较大,yield则是时间片;
你可能需要时间间隔的一些辅助别名:
std::chrono::nanoseconds duration
std::chrono::microseconds duration
std::chrono::milliseconds duration
std::chrono::seconds duration
std::chrono::minutes duration
std::chrono::hours duration
std::chrono::days (since C++20) duration
std::chrono::weeks (since C++20) duration
std::chrono::months (since C++20) duration
std::chrono::years (since C++20) duration
从纳秒到年均有定义。在std::thread::sleep_for这样用就可以了:
std::this_thread::sleep_for(std::chrono::nanoseconds(5));//五纳秒
为了简单,你可以定义一个别名:
using ms=std::chrono::microseconds;
std::this_thread::sleep_for(ms(5));//五毫秒!
在C++14后,有一种更加接近人类的写法:
像这样:
#include
#include
int main()
{
using namespace std::chrono_literals;
auto d1 = 250ms;
std::chrono::milliseconds d2 = 1s;
std::cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?