C++标准线程库之当前线程管理

有时需要对当前运行的子线程进行一些额外的处理,如:使线程休眠一段时间,再次调度等。C++11标准库提供了管理当前线程的函数,这些函数都定义于命名空间this_thread

1. 获取当前线程的标识符

#include 

inline thread::id std::this_thread::get_id();
// 返回当前线程id
#include 
#include 

void func()
{
    std::cout << "work thread id: " << std::this_thread::get_id() << std::endl;
}

int main()
{
    std::thread thread(func);
    thread.join();
    return 0;
}

2. 线程重新调度

#include 
    
inline void std::this_thread::yield();
// 使当前线程进入线程队列,重新进行调度,来允许其他线程运行。
// 依赖于底层的系统调度机制和系统状态。

需要注意的是,虽然t1线程重新调度,但是t2线程也不一定能先于t1输出。

3. 线程睡眠

#include 

template<typename _Rep, typename _Period>
inline void std::this_thread::sleep_for(const chrono::duration<_Rep, _Period>& __rtime);
// 只要知道其参数一个时间间隔,后续会介绍这个新时间类
// 可以使当前线程休眠一段时间

template<typename _Clock, typename _Duration>
inline void std::this_thread::sleep_until(const chrono::time_point<_Clock, _Duration>& __atime);
// 只要知道其参数一个时间点,后续会介绍这个新时间类
// 可以使当前线程休眠到某个时间点
#include 
#include 

// 用到了时间函数, 后续会介绍
// C++14标准的
using namespace std::chrono_literals;

void func()
{
    // 2s是一个运算符重载函数,这里表示2秒,且是真实时间,后续会介绍
    std::this_thread::sleep_for(2s);
    std::cout << "thread 1." << std::endl;
}


int main()
{
    std::thread t(func);
    t.join();
    return 0;
}

这里需要用到新时间类,这个时间类提供了与代码执行时间无关的时间测量(稳定时钟),对于超时是非常重要的,后续会专门谈到。

4. 相关系列

  • C++标准线程库之入门

你可能感兴趣的:(C++标准库)