Changeset 604
- Timestamp:
- 12/05/07 07:48:36 (1 year ago)
- Files:
-
- version_0/lib/pr_eventmachine.rb (modified) (5 diffs)
- version_0/tests/test_timers.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
version_0/lib/pr_eventmachine.rb
r603 r604 33 33 require 'socket' 34 34 require 'fcntl' 35 require 'set' 35 36 36 37 … … 158 159 end 159 160 161 # #set_max_timer_count is a harmless no-op in pure Ruby, which doesn't have a built-in limit 162 # on the number of available timers. 163 def set_max_timer_count n 164 end 165 160 166 end 161 167 … … 218 224 end 219 225 226 #-- 227 # Replaced original implementation 05Dec07, was way too slow because of the sort. 220 228 def install_oneshot_timer interval 221 229 uuid = UuidGenerator::generate 222 @timers << [Time.now + interval, uuid] 223 @timers.sort! {|a,b| a.first <=> b.first} 230 #@timers << [Time.now + interval, uuid] 231 #@timers.sort! {|a,b| a.first <=> b.first} 232 @timers.add([Time.now + interval, uuid]) 224 233 uuid 225 234 end … … 231 240 @stop_scheduled = false 232 241 @selectables ||= {}; @selectables.clear 233 @timers = []234 set_timer_quantum(0. 5)242 @timers = SortedSet.new # [] 243 set_timer_quantum(0.1) 235 244 end 236 245 … … 264 273 def run_timers 265 274 now = Time.now 266 while @timers.length > 0 and @timers.first.first <= now 267 t = @timers.shift 268 EventMachine::event_callback "", TimerFired, t.last 269 end 275 @timers.each {|t| 276 if t.first <= now 277 @timers.delete t 278 EventMachine::event_callback "", TimerFired, t.last 279 else 280 break 281 end 282 } 283 #while @timers.length > 0 and @timers.first.first <= now 284 # t = @timers.shift 285 # EventMachine::event_callback "", TimerFired, t.last 286 #end 270 287 end 271 288 version_0/tests/test_timers.rb
r580 r604 107 107 108 108 109 # This test is only applicable to compiled versions of the reactor. 110 # Pure ruby versions have no built-in limit on the number of outstanding timers. 111 # 109 112 def test_timer_change_max_outstanding 110 113 ten_thousand_timers = proc { … … 114 117 } 115 118 EM.run { 116 assert_raise( RuntimeError ) {119 if EM.library_type == :pure_ruby 117 120 ten_thousand_timers.call 118 } 121 else 122 assert_raise( RuntimeError ) { 123 ten_thousand_timers.call 124 } 125 end 119 126 EM.stop 120 127 }
