整理自:zh.cppreference.com/w/cpp/thread
std::this_thread::yield:
定义于头文件 <thread>
函数原型:void yield() noexcept;
此函数的准确性为依赖于实现,特别是使用中的 OS 调度器机制和系统状态。例如,先进先出实时调度器( Linux 的 SCHED_FIFO )将悬挂当前线程并将它放到准备运行的同优先级线程的队列尾(而若无其他线程在同优先级,则 yield 无效果)
代码:
1 #include <iostream> 2 #include <thread> 3 #include <chrono> 4 using namespace std; 5 6 void little_sleep(std::chrono::milliseconds us) { 7 auto start = std::chrono::high_resolution_clock::now(); 8 auto end = start + us; 9 do { 10 std::this_thread::yield();//让出当前时间片 11 }while(std::chrono::high_resolution_clock::now() < end); 12 } 13 14 int main(void) { 15 auto start = std::chrono::high_resolution_clock::now();//获取当前时间 16 17 little_sleep(std::chrono::milliseconds(100)); 18 19 auto elapsed = std::chrono::high_resolution_clock::now() - start;//计算执行 little_sleep 所用时间 20 21 cout << "waited fo " 22 << std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count() //将 elapsed 时间周期转化为 milliseconds 并输出 23 << " milliseconds\n"; 24 25 // 输出: 26 // waited fo 100 milliseconds 27 28 return 0; 29 }