# File tk/lib/tk/timer.rb, line 556 def cancel super() @est_time = nil @cb_start_time = Time.now self end
# File tk/lib/tk/timer.rb, line 645 def cb_call if @est_time @offset_list.shift @cb_start_time = Time.now if @current_sleep == 0 @offset_list.push([ @offset_s - @cb_start_time.to_i, @offset_u - @cb_start_time.usec ]) else @offset_list.push([ @offset_s + (@est_time.to_i - @cb_start_time.to_i), @offset_u + (@est_time.usec - @cb_start_time.usec) ]) end end @cb_cmd.call end
# File tk/lib/tk/timer.rb, line 564 def continue(wait=nil) fail RuntimeError, "is already running" if @running @cb_start_time = Time.now super(wait) end
# File tk/lib/tk/timer.rb, line 570 def set_interval(interval) super(interval) @est_time = nil end
# File tk/lib/tk/timer.rb, line 591 def set_next_callback(args) if @running == false || @proc_max == 0 || @do_loop == 0 Tk_CBTBL.delete(@id) ;# for GC @running = false # @wait_var.value = 0 __at_end__ return end if @current_pos >= @proc_max if @do_loop < 0 || (@do_loop -= 1) > 0 @current_pos = 0 else Tk_CBTBL.delete(@id) ;# for GC @running = false # @wait_var.value = 0 __at_end__ return end end @current_args = args cmd, *cmd_args = @loop_proc[@current_pos] @current_pos += 1 @current_proc = cmd @offset_s, @offset_u = _offset_ave if TkComm._callback_entry?(@sleep_time) sleep = @sleep_time.call(self) else sleep = @sleep_time end if @est_time @est_time = Time.at(@est_time.to_i, @est_time.usec + sleep*1000) else @est_time = Time.at(@cb_start_time.to_i, @cb_start_time.usec + sleep*1000) end now = Time.now real_sleep = ((@est_time.to_i - now.to_i + @offset_s)*1000.0 + (@est_time.usec - now.usec + @offset_u)/1000.0).round if real_sleep <= 0 real_sleep = 0 @offset_s = now.to_i @offset_u = now.usec end @current_sleep = real_sleep set_callback(real_sleep, cmd_args) end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.