CLOCK_NANOSLEEP(2) | Linux Programmer's Manual | CLOCK_NANOSLEEP(2) |
名前
clock_nanosleep -指定したクロックでの高精度な実行停止 (sleep)書式
#include <time.h>int clock_nanosleep(clockid_t clock_id , int flags ,
const struct timespec * request ,
struct timespec * remain );
glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
_XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L
説明
clock_nanosleep() を使うと、 nanosleep(2) 同様、ナノ秒の精度で指定された期間だけ呼び出したスレッドの実行を停止することができる。 nanosleep(2) と違うのは、呼び出し側が停止期間をどのクロックに対して計測するのかを選択できる点と、停止期間を絶対値でも相対値でも指定できる点である。struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds [0 .. 999999999] */
};
- CLOCK_REALTIME
- システム全体で使われる実時間クロック。このクロックは変更可能である。
- CLOCK_MONOTONIC
- 過去のある時点からの時間を計測する、単調増加のクロック。起点となる時点はシステム起動後には変更されない。このクロックは変更することができない。
- CLOCK_PROCESS_CPUTIME_ID
- そのプロセスの全スレッドで消費される CPU 時間を計測するプロセス単位のクロック。このクロックは設定可能である。
これらのクロックの詳細については clock_getres(2) を参照。
flags が 0 の場合、 request に指定された値は clock_id で指定されたクロックの現在の値からの相対的な期間と解釈される。
flags が TIMER_ABSTIME の場合、 request は指定されたクロックで計測される絶対時刻と解釈される。 request が指定されたクロックの現在の値以下の場合、 clock_nanosleep() は、呼び出したスレッドの停止を行わず、すぐに返る。
clock_nanosleep() は、少なくとも request で指定された時間が経過するまで、呼び出したスレッドの実行を停止する。シグナルハンドラが呼び出されたり、そのプロセスを終了させるようなシグナルが配送されたりした場合にも、スレッドの実行停止は終了する。
呼び出しがシグナルハンドラによって割り込まれた場合、 clock_nanosleep() はエラー EINTR で失敗する。さらに、 remain が NULL でなく、かつ flags が TIMER_ABSTIME でない場合には、 remain に残りの停止時間が返される。この値を使って clock_nanosleep() を再度呼び出すことで、(相対的な期間の) 停止を完了することができる。
返り値
要求された期間の停止に成功すると、 clock_nanosleep() は 0 を返す。シグナルハンドラで割り込まれたり、エラーが発生したりした場合、「エラー」の節のリストにある正のエラー番号のいずれか一つを返す。エラー
- EFAULT
- request や remain に無効なアドレスが指定された。
- EINTR
- 停止がシグナルハンドラにより割り込まれた。
- EINVAL
- tv_nsec フィールドの値が 0 から 999999999 の範囲でないか、 tv_sec の値が負であった。
- EINVAL
- clock_id が無効であった ( CLOCK_THREAD_CPUTIME_ID が clock_id として有効な値ではない)。
バージョン
clock_nanosleep() システムコールは Linux 2.6 で初めて登場した。 glibc ではバージョン 2.1 以降でサポートされている。準拠
POSIX.1-2001.注意
request で指定された停止期間が、時間の計測に使用されるクロック ( time(7) 参照) の精度の倍数ちょうどでない場合、停止期間は一番近い次の倍数に切り上げられる。さらに、停止が完了した後に、CPU が呼び出したスレッドをもう一度実行できるようになるまでには、遅延が入る可能性がある。関連項目
clock_getres(2), nanosleep(2), timer_create(2), sleep(3), usleep(3), time(7)この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2012-11-07 | Linux |