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