整理自:zh.cppreference.com/w/cpp/thread

std::this_thread::yield:

定义于头文件 <thread>

函数原型:void yield() noexcept;

此函数的准确性为依赖于实现,特别是使用中的 OS 调度器机制和系统状态。例如,先进先出实时调度器( Linux 的 SCHED_FIFO )将悬挂当前线程并将它放到准备运行的同优先级线程的队列尾(而若无其他线程在同优先级,则 yield 无效果)

代码:

 #include <iostream>
#include <thread>
#include <chrono>
using namespace std; void little_sleep(std::chrono::milliseconds us) {
auto start = std::chrono::high_resolution_clock::now();
auto end = start + us;
do {
std::this_thread::yield();//让出当前时间片
}while(std::chrono::high_resolution_clock::now() < end);
} int main(void) {
auto start = std::chrono::high_resolution_clock::now();//获取当前时间 little_sleep(std::chrono::milliseconds()); auto elapsed = std::chrono::high_resolution_clock::now() - start;//计算执行 little_sleep 所用时间 cout << "waited fo "
<< std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count() //将 elapsed 时间周期转化为 milliseconds 并输出
<< " milliseconds\n"; // 输出:
// waited fo 100 milliseconds return ;
}

std::this_thread::get_id:

定义于头文件 <thread>

函数原型:std::thread::id get_id() noexcept;

得到当前线程的 id

代码:

 #include <iostream>
#include <thread>
#include <chrono>
#include <mutex>
using namespace std; std::mutex g_display_mutex; void foo() {
auto this_id = std::this_thread::get_id(); g_display_mutex.lock();
cout << "thread" << this_id << " sleeping..." << endl;
g_display_mutex.unlock(); std::this_thread::sleep_for(std::chrono::seconds());
} int main(void) {
std::thread t1(foo);
std::thread t2(foo); t1.join();
t2.join(); // 输出:
// thread2 sleeping...
// thread3 sleeping... return ;
}

std::this_thread::sleep_for:

定义于头文件 <thread>

函数原型

template< class Rep, class Period >
void sleep_for( const std::chrono::duration<Rep, Period>& sleep_duration );

阻塞当前线程执行,以至少为指定的 sleep_duration 。

此函数可能阻塞长于 sleep_duration ,因为调度或资源争议延迟。

标准库建议用稳定时钟度量时长。若实现用系统时间代替,则等待时间亦可能对始终调节敏感

异常:任何时钟、 time_point 或 duration 在执行间抛出的异常(标准库提供的时钟、时间点和时长决不抛出)

代码:

 #include <iostream>
#include <chrono>
#include <thread>
using namespace std; int main(void) {
cout << "hello waiter" << endl; auto start = std::chrono::high_resolution_clock::now();
std::this_thread::sleep_for(std::chrono::seconds());
auto end = std::chrono::high_resolution_clock::now(); std::chrono::duration<double, std::milli> elapsed = end - start;
cout << "waited " << elapsed.count() << " ms" << endl; // 输出:
// hello waiter
// waited 2001.44 ms return ;
}

std::this_thread::sleep_until:

定义于头文件 <thread>

template< class Clock, class Duration >
void sleep_until( const std::chrono::time_point<Clock,Duration>& sleep_time );

阻塞当前线程,直至抵达指定的 sleep_time 。

使用联倾向于 sleep_time 的时钟,这表示时钟调节有影响。从而在调用时间点后,阻塞的时长可能小于,但不会多于 sleep_time - Clock::now() 。函数亦可能阻塞长于抵达 sleep_time 之后,由于调度或资源争议延迟

代码:

 #include <iostream>
#include <chrono>
#include <thread>
using namespace std; int main(void) {
auto start = std::chrono::high_resolution_clock::now();
std::this_thread::sleep_until(start + std::chrono::seconds());
auto end = std::chrono::high_resolution_clock::now(); std::chrono::duration<double, std::milli> elapsed = end - start;
cout << "waited " << elapsed.count() << " ms" << endl; // 输出:
// waited 2001.42 ms return ;
}

最新文章

  1. 5 HTML&amp;JS等前端知识系列之jquery基础
  2. How to use FTP
  3. mysql connection refused
  4. Cordova webapp实战开发(20161207 )
  5. Quartz定时任务学习(一)简单任务
  6. 【Android开发坑系列】之Fragment
  7. Eclipse无法通过FileExplore打开真机data目录
  8. Java &quot;JSON中无分隔符日期字符串处理&quot;
  9. tabindex属性
  10. 【 js 基础 】【 源码学习 】backbone 源码阅读(三)浅谈 REST 和 CRUD
  11. Less的嵌套规则
  12. [BZOJ1050] [HAOI2006] 旅行comf (Kruskal, LCT)
  13. ubuntu 16.04上 mysql 5.7 安装笔记
  14. python文件读取操作
  15. android 通过修改图片像素实现CircleImageView
  16. luogu P2331 [SCOI2005]最大子矩阵
  17. Winform选择目录路径与选择文件路径
  18. matlab画图变粗脚本
  19. selector的小箭头去除
  20. SMTP 发邮件

热门文章

  1. day5心得
  2. html-select
  3. uboot重定位代码分析(转)
  4. POJ1161(并查集)
  5. AngularJS学习(一)
  6. LINUX下用C语言历遍目录 C语言列出目录 dirent.h在C/C++中的使用
  7. SpringCloud02 Eureka知识点、Eureka服务端和客户端的创建、Eureka服务端集群、Eureka客户端向集群的Eureka服务端注册
  8. Stream01 定义、迭代、操作、惰性求值、创建流、并行流、收集器、stream运行机制
  9. 20-取石子动态规则(hdu2516 斐波那契博弈)
  10. 26.COUNT() 函数