命名空间
变体
操作

std::this_thread::sleep_until

来自 cppreference.com
< 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++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 中已弃用)
内存排序
用于原子操作的自由函数
用于原子标志的自由函数
 
定义在头文件 <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 文档 for thrd_sleep