名前空間
変種
操作

thrd_sleep

提供: cppreference.com
< c‎ | thread
ヘッダ <threads.h> で定義
int thrd_sleep( const struct timespec* duration,
                struct timespec* remaining );
(C11およびそれ以降)

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

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); // 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

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.26.5.7 The thrd_sleep function (p: 385)

[編集] 関連項目

現在のタイムスライスを放棄します
(関数) [edit]
sleep_untilC++リファレンス