class EaseEngine::Timer

Attributes

update_time_usec[RW]

Public Class Methods

new( options = {} ) click to toggle source
# File lib/ease_engine/timer.rb, line 25
def initialize( options = {} )
  options[ :update_time_usec ] = 100000 if ! options.key?( :update_time_usec )
  
  @update_time_usec = options[ :update_time_usec ]
  @check_time_usec = 0
  
  @timer = Record.new( 1, 0xFFFFFFFF )
  @group = EaseEngine::Data::Group.new
end

Public Instance Methods

add( group_id, timeout_usec, arg, callback ) click to toggle source
# File lib/ease_engine/timer.rb, line 35
def add( group_id, timeout_usec, arg, callback )
  timer_id = @timer.add( Info.new( EaseEngine::Time.new.to_unix_epoch_time_usec + timeout_usec, arg, callback ) )
  return 0 if 0 == timer_id
  
  @group.add( group_id, timer_id ) if 0 < group_id
  
  timer_id
end
remove( group_id, timer_id = 0 ) click to toggle source
# File lib/ease_engine/timer.rb, line 44
def remove( group_id, timer_id = 0 )
  @group.group( group_id ).each{|timer_id, group_id|
    @timer.remove( timer_id )
  }
  @group.remove( group_id, timer_id )
  @timer.remove( timer_id )
end
update() click to toggle source
# File lib/ease_engine/timer.rb, line 52
def update
  return if 0 == @timer.size
  
  usec = EaseEngine::Time.new.to_unix_epoch_time_usec
  return if usec < @check_time_usec
  
  @timer.each{|id, index, info|
    if info.end_time_usec < usec
      remove( 0, id )
      
      info.callback.call( info.arg )
    else
      # 終了時間の早い順に昇順ソートしているので、後のデータをチェックする必要なし
      break
    end
  }
  
  @check_time_usec = usec + @update_time_usec
end