命名空间
变体
操作

std::this_thread::sleep_until

来自 cppreference.cn
< cpp‎ | thread
 
 
并发支持库
线程
(C++11)
(C++20)
this_thread 命名空间
(C++11)
(C++11)
(C++11)
sleep_until
(C++11)
协同取消
互斥
(C++11)
通用锁管理
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
条件变量
(C++11)
信号量
门闩和屏障
(C++20)
(C++20)
期值
(C++11)
(C++11)
(C++11)
(C++11)
安全回收
(C++26)
危险指针
原子类型
(C++11)
(C++20)
原子类型的初始化
(C++11)(C++20 中已弃用)
(C++11)(C++20 中已弃用)
内存排序
(C++11)(C++26 中已弃用)
原子操作的自由函数
原子标志的自由函数
 
定义于头文件 <thread>
template< class Clock, class Duration >
void sleep_until( const std::chrono::time_point<Clock, Duration>& sleep_time );
(C++11 起)

阻塞当前线程的执行,直到到达指定的 sleep_time

Clock 必须满足 Clock 的要求。如果 std::chrono::is_clock_v<Clock>false,则程序是非良构的。(C++20 起)

标准建议使用与 sleep_time 绑定的时钟,在这种情况下,可能会考虑时钟的调整。因此,阻塞的持续时间可能会比调用时 sleep_time - Clock::now() 更长或更短,具体取决于调整的方向以及实现是否遵循该调整。该函数也可能由于进程调度或资源竞争延迟而阻塞直到 sleep_time 之后才解除。

目录

[编辑] 参数

sleep_time - 阻塞直到指定时间

[编辑] 返回值

(无)

[编辑] 异常

任何由 ClockDuration 抛出的异常(标准库提供的时钟和持续时间从不抛出)。

[编辑] 示例

#include <chrono>
#include <iostream>
#include <thread>
 
auto now() { return std::chrono::steady_clock::now(); }
 
auto awake_time()
{
    using std::chrono::operator""ms;
    return now() + 2000ms;
}
 
int main()
{
    std::cout << "Hello, waiter...\n" << std::flush;
    const auto start{now()};
    std::this_thread::sleep_until(awake_time());
    std::chrono::duration<double, std::milli> elapsed{now() - start};
    std::cout << "Waited " << elapsed.count() << " ms\n";
}

可能的输出

Hello, waiter...
Waited 2000.17 ms

[编辑] 参阅

(C++11)
停止当前线程的执行一段指定的时间
(函数) [编辑]
C 文档 关于 thrd_sleep