您当前的位置: 首页 >  c++

我什么都布吉岛

暂无认证

  • 4浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++11线程库 (二) 管理当前线程

我什么都布吉岛 发布时间:2021-02-27 16:06:17 ,浏览量:4

一、管理线程的四个方法

命名空间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             
关注
打赏
1658157489
查看更多评论
0.0354s