名前空間
変種
操作

thrd_sleep

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

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

無視されないシグナルを受信した場合、スリープは早期に再開されることがあります。その場合、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); // 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 The thrd_sleep function (p: 281)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.26.5.7 The thrd_sleep function (p: 385)

[編集] 関連項目

現在のタイムスライスを譲る
(関数) [編集]
C++ドキュメント for sleep_for
English 日本語 中文(简体) 中文(繁體)