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ミリ秒ごとに繰り返し呼び出されます。

注記

イベントループが認識する「現在時刻」は更新しません。詳しくはuv_update_time()を参照してください。

タイマーが既にアクティブなら、そのタイマーを更新します。

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関数も適用されます。