In Files

  • tk/lib/tk/timer.rb

Class/Module Index [+]

Quicksearch

TkRTTimer

Public Class Methods

new(*args, &b) click to toggle source
 
               # File tk/lib/tk/timer.rb, line 540
def initialize(*args, &b)
  super(*args, &b)

  @offset_list = Array.new(DEFAULT_OFFSET_LIST_SIZE){ [0, 0] }
  @offset_s = 0
  @offset_u = 0
  @est_time = nil
end
            

Public Instance Methods

cancel() click to toggle source
 
               # File tk/lib/tk/timer.rb, line 556
def cancel
  super()
  @est_time = nil
  @cb_start_time = Time.now
  self
end
            
Also aliased as: stop
cb_call() click to toggle source
 
               # 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
            
continue(wait=nil) click to toggle source
 
               # 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
            
set_interval(interval) click to toggle source
 
               # File tk/lib/tk/timer.rb, line 570
def set_interval(interval)
  super(interval)
  @est_time = nil
end
            
set_next_callback(args) click to toggle source
 
               # 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
            
start(*args, &b) click to toggle source
 
               # File tk/lib/tk/timer.rb, line 549
def start(*args, &b)
  return nil if @running
  @est_time = nil
  @cb_start_time = Time.now
  super(*args, &b)
end
            
stop() click to toggle source
Alias for: cancel

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.