thrd_sleep

来自cppreference.com
< c‎ | thread
在标头 <threads.h> 定义
int thrd_sleep( const struct timespec* duration,
                struct timespec* remaining );
(C11 起)

阻塞当前线程的执行,至少直至经过 duration 所指向的基于 TIME_UTC 的时长。

若收到不忽略的信号(signal),则可以较早地从休眠恢复。此情况下,若 remainingNULL,则存储剩余时长到 remaining 所指向的对象中。

参数

duration - 指向要休眠的时长的指针
remaining - 指向要放置中断剩余时间的对象的指针。可为 NULL,此情况下忽略它

返回值

成功休眠时为 0,若出现信号则为 -1,若出现错误则为其他负值。

注意

durationremaining 可以指向相同对象,这会简化函数在信号后的重新运行。

实际休眠时间可能长于请求,因为它会被向上舍入到计时器的粒度,而且还因为调度和环境切换开销。

此函数的 POSIX 等价版本是 nanosleep

示例

#include <threads.h>
#include <time.h>
#include <stdio.h>
 
int main(void)
{
    printf("Time: %s", ctime(&(time_t){time(NULL)}));
    thrd_sleep(&(struct timespec){.tv_sec=1}, NULL); // 睡眠 1 秒
    printf("Time: %s", ctime(&(time_t){time(NULL)}));
}

输出:

Time: Mon Feb  2 16:18:41 2015
Time: Mon Feb  2 16:18:42 2015

引用

  • C17 标准(ISO/IEC 9899:2018):
  • 7.26.5.7 The thrd_sleep function (第 281 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 7.26.5.7 The thrd_sleep function (第 385 页)

参阅

让出当前时间片段
(函数)