Namespaces
Variants

thrd_sleep

From cppreference.net
ヘッダーで定義 <threads.h>
int thrd_sleep ( const struct timespec * duration,
struct timespec * remaining ) ;
(C11以降)

現在のスレッドの実行を、 少なくとも TIME_UTC ベースの期間が duration によって指される時間が経過するまでブロックします。

無視されない signal を受信した場合、スリープは早期に再開される可能性があります。この場合、 remaining NULL でない場合、残り時間が remaining が指すオブジェクトに格納されます。

目次

パラメータ

duration - スリープする期間へのポインタ
remaining - 割り込み時に残り時間を格納するオブジェクトへのポインタ。 NULL を指定可能(その場合は無視される)

戻り値

0 正常にスリープした場合、 - 1 はシグナルが発生した場合、その他の負の値はエラーが発生した場合を示します。

注記

duration remaining は同じオブジェクトを指している可能性があり、これによりシグナル後にこの関数を再実行するのが簡素化されます。

実際のスリープ時間は、タイマーの粒度に切り上げられることや、スケジューリングおよびコンテキストスイッチのオーバーヘッドにより、要求された時間よりも長くなる可能性があります。

この関数の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); // sleep 1 sec
    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 thrd_sleep関数 (p: 281)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.26.5.7 thrd_sleep関数 (p: 385)

関連項目

現在のタイムスライスを譲る
(関数)
C++ documentation for sleep_for