从Ruby 1.8.5移植到1.8.6 |线程问题

时间:2009-09-25 13:07:55

标签: ruby multithreading

我正在尝试使用Ruby 1.8.6的示例。 问题是该示例是为Ruby 1.8.5编写的。

我的假设是问题在于线程被调用或未被调用的方式。 这是样本:

class Timer
  def initialize(resolution)
    @resolution = resolution
    @queue = []

    Thread.new do
      while true
        dispatch
        sleep(@resolution)
      end
    end
  end

  def at(time, &block)
    time = time.to_f if time.kind_of?(Time)
    @queue.push [time, block]
  end

  private
  def dispatch
    now = Time.now.to_f
    ready, @queue = @queue.partition{|time, proc|  time <= now }
    ready.each {|time, proc| proc.call(time) }
  end
end


timer = Timer.new(0.01)
timer.at(Time.now + 3) { puts "Hello" }

我无法使用1.8.6,所以我希望有人能告诉我如何使其与1.8.6兼容

由于

1 个答案:

答案 0 :(得分:3)

您的问题可能是主线程的执行早于3秒超时通过,尝试将sleep(3.2)放在代码的末尾。如果不是这样,请描述您想要实现的目标以及尝试这样做时会发生什么