ユーザ用ツール

サイト用ツール


alworker:タイマー

AlWoker タイマー

require "al_wotker_timer"


タイマーイベントを発生させます。
以下の3つの機能をもちます。

  • 一定時間ごと(例:0.5秒ごと)に処理を行う、繰り返しタイマー。
  • 指定した秒数が経過後に処理を行う、シングルショットタイマー。
  • 指定した時刻に処理を行う、シングルショットタイマー。

サンプル

繰り返しタイマー

timer_periodic.rb
# 繰り返しタイマー
#  一秒ごとに、時刻を表示する。
require "al_worker_timer"
 
class Worker1 < AlWorker
  def initialize2()
    @timer = Timer.periodic( 1 )        # every 1 sec.
    @timer.run() {
      puts Time.now
    }
  end
end
 
Worker1.new.run

Timer.periodic の第2引数で、最初の起動までの秒数を指定できます。

    @timer = Timer.periodic( 60, 5 )      # 5秒後に起動し、その後60秒ごとに起動する

シングルショットタイマー

timer_singleshot1.rb
# シングルショットタイマー
# 5秒後に時刻を表示して終了する。
require "al_worker_timer"
 
class Worker1 < AlWorker
  def initialize2()
    @timer = Timer.singleshot( 5 )      # 5 sec later.
    @timer.run() {
      puts Time.now
      exit
    }
  end
end
 
Worker1.new.run
timer_singleshot2.rb
# シングルショットタイマー
# 次の正時に時刻を表示して終了する。
require "al_worker_timer"
 
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 アトリビュートを変更します。

    @timer.mode_sync = :async    # 非同期
    @timer.mode_sync = :sync     # 同期(デフォルト)

停止

タイマーは、任意のタイミングで停止できます。

    @timer.stop()
alworker/タイマー.txt · 最終更新: 2021/10/01 11:50 by hirohito