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 543
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 559
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 648
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 567
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 573
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 594
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 552
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