命名空间
变体
操作

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 文档 for thrd_sleep