uv_timer_t — タイマーハンドル¶
タイマーハンドルは、将来呼び出すコールバックをスケジュールするために使います。
タイマーには、1回だけ実行するものと、繰り返し実行するものがあります。繰り返しタイマーはオーバーヘッドを補正せず、イベントループが認識する「現在時刻」を基準として再設定されます。
libuvは、タイマーのコールバックを実行する直前と、入出力待ちから復帰した直後に、認識している「現在時刻」を更新します。uv_update_time()も参照してください。
例: 間隔50 msの繰り返しタイマーで、コールバックの完了に17 msかかる場合、33 ms後に再び実行されます。他のタスクが33 msを超えて時間を使う場合、タイマーのコールバックは実行可能になり次第呼び出されます。
データ型¶
-
type uv_timer_t¶
タイマーハンドルの型。
-
typedef void (*uv_timer_cb)(uv_timer_t *handle)¶
uv_timer_start()に渡すコールバックの型定義です。
公開メンバー¶
該当なし
関連項目
uv_handle_tのメンバーも適用されます。
API¶
-
int uv_timer_init(uv_loop_t *loop, uv_timer_t *handle)¶
ハンドルを初期化します。
-
int uv_timer_start(uv_timer_t *handle, uv_timer_cb cb, uint64_t timeout, uint64_t repeat)¶
タイマーを開始します。timeoutとrepeatの単位はミリ秒です。
timeoutが0なら、次のイベントループの反復でコールバックが呼び出されます。repeatが0以外なら、最初のコールバックはtimeoutミリ秒後に呼び出され、その後はrepeatミリ秒ごとに繰り返し呼び出されます。
-
int uv_timer_stop(uv_timer_t *handle)¶
タイマーを停止します。以後、コールバックは呼び出されません。
-
int uv_timer_again(uv_timer_t *handle)¶
タイマーを停止し、繰り返しタイマーであれば、繰り返しの値をタイムアウトとして再開します。タイマーを一度も開始したことがなければ、UV_EINVALを返します。
-
void uv_timer_set_repeat(uv_timer_t *handle, uint64_t repeat)¶
繰り返し間隔をミリ秒で設定します。コールバックの実行時間にかかわらず、指定された間隔で実行するようタイマーをスケジュールします。タイムスライスを超過した場合は、通常のタイマーの動作規則に従います。
注記
タイマーのコールバックから繰り返しの値を設定しても、すぐには反映されません。それまで繰り返しを行っていなかったタイマーは、既に停止しています。繰り返しタイマーであった場合は、以前の繰り返しの値を使って次のタイムアウトがスケジュールされています。
-
uint64_t uv_timer_get_repeat(const uv_timer_t *handle)¶
タイマーの繰り返しの値を取得します。
-
uint64_t uv_timer_get_due_in(const uv_timer_t *handle)¶
タイマーの期限までの時間を取得します。既に期限が切れていれば0を返します。この時間は
uv_now()を基準にした相対値です。バージョン1.40.0で追加。
関連項目
uv_handle_tのAPI関数も適用されます。