alworker:タイマー
no way to compare when less than two revisions
差分
このページの2つのバージョン間の差分を表示します。
次のリビジョン | |||
— | alworker:タイマー [2013/06/02 17:40] – 外部編集 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== AlWoker タイマー ====== | ||
+ | |||
+ | require " | ||
+ | ---- | ||
+ | タイマーイベントを発生させます。\\ | ||
+ | 以下の3つの機能をもちます。\\ | ||
+ | |||
+ | * 一定時間ごと(例:1秒ごと)に処理を行う、繰り返しタイマー。 | ||
+ | * 指定した秒数が経過後に処理を行う、シングルショットタイマー。 | ||
+ | * 指定した時刻に処理を行う、シングルショットタイマー。 | ||
+ | |||
+ | ====== サンプル ====== | ||
+ | |||
+ | <file ruby timer_periodic.rb> | ||
+ | # 繰り返しタイマー | ||
+ | # 一秒ごとに、時刻を表示する。 | ||
+ | require " | ||
+ | |||
+ | class Worker1 < AlWorker | ||
+ | def initialize2() | ||
+ | @timer = Timer.periodic( 1 ) # every 1 sec. | ||
+ | @timer.run() { | ||
+ | puts Time.now | ||
+ | } | ||
+ | end | ||
+ | end | ||
+ | |||
+ | Worker1.new.run | ||
+ | </ | ||
+ | |||
+ | |||
+ | <file ruby timer_singleshot1.rb> | ||
+ | # シングルショットタイマー | ||
+ | # 5秒後に時刻を表示して終了する。 | ||
+ | require " | ||
+ | |||
+ | class Worker1 < AlWorker | ||
+ | def initialize2() | ||
+ | @timer = Timer.singleshot( 5 ) # 5 sec later. | ||
+ | @timer.run() { | ||
+ | puts Time.now | ||
+ | exit | ||
+ | } | ||
+ | end | ||
+ | end | ||
+ | |||
+ | Worker1.new.run | ||
+ | </ | ||
+ | |||
+ | |||
+ | <file ruby timer_singleshot2.rb> | ||
+ | # シングルショットタイマー | ||
+ | # 次の正時に時刻を表示して終了する。 | ||
+ | require " | ||
+ | |||
+ | class Worker1 < AlWorker | ||
+ | def initialize2() | ||
+ | t = Time.now | ||
+ | @timer = Timer.singleshot( Time.mktime( t.year, t.mon, t.day, t.hour+1 ) ) | ||
+ | @timer.run() { | ||
+ | puts Time.now | ||
+ | exit | ||
+ | } | ||
+ | end | ||
+ | end | ||
+ | |||
+ | Worker1.new.run | ||
+ | </ | ||
+ | |||
+ | ====== 同期・非同期 ====== | ||
+ | |||
+ | イベントハンドラは、デフォルトで同期的に呼び出されます。非同期にしたい場合は、mode_sync アトリビュートを変更します。 | ||
+ | |||
+ | <code ruby> | ||
+ | @timer.mode_sync = : | ||
+ | @timer.mode_sync = :sync # 同期(デフォルト) | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== 停止 ====== | ||
+ | |||
+ | タイマーは、任意のタイミングで停止できます。 | ||
+ | |||
+ | <code ruby> | ||
+ | @timer.stop() | ||
+ | </ | ||
alworker/タイマー.txt · 最終更新: 2021/10/01 11:50 by hirohito