(12)std::this_thread::yield/sleep_for

std::this_thread::yield(): 当前线程放弃执行,操作系统调度另一线程继续执行。
区别
std::this_thread::sleep_for(): 表示当前线程休眠一段时间,休眠期间不与其他线程竞争CPU,根据线程需求,等待若干时间。
#include <iostream>
#include <chrono>
#include <thread>

void little_sleep(std::chrono::microseconds us)
{
    auto start = std::chrono::high_resolution_clock::now();  // 获取当前时间点
    auto end = start + us;  // 计算目标结束时间点
    do {
        std::this_thread::yield();  // 主动让出 CPU 时间片
    } while (std::chrono::high_resolution_clock::now() < end);  // 循环直到超时
}

int main()
{
    auto start = std::chrono::high_resolution_clock::now();

    little_sleep(std::chrono::microseconds(100));

    auto elapsed = std::chrono::high_resolution_clock::now() - start;
    
    std::cout << "waited for "
        << std::chrono::duration_cast<std::chrono::microseconds>(elapsed).count()
        << " microseconds\n";

    system("pause");
}
posted @ 2019-06-24 22:34  osbreak  阅读(2137)  评论(0)    收藏  举报