ruby:如何在OO ruby中进行异步回调

ruby:如何在OO ruby中进行异步回调,ruby,multithreading,asynchronous,Ruby,Multithreading,Asynchronous,我在App.rb中有一个名为classapp的ruby类 它有一个名为@ui 如果调用了@ui.draw,将重新绘制gui 我想监视一个.txt文件,如果文件大小改变,我想调用上面提到的.draw方法。 我该怎么做?有可能做一个钩子/回调吗?也许所以我找到了我自己问题的答案。您可以使用并发ruby库。 它有一个TimerTask对象和一个Observer工具。您可以启动一个线程来监视上次修改的时间。您可能应该在它自己的类中实现这一点 Thread.new do last_changed_at

我在App.rb中有一个名为
classapp
的ruby类 它有一个名为
@ui
如果调用了
@ui.draw
,将重新绘制gui

我想监视一个.txt文件,如果文件大小改变,我想调用上面提到的.draw方法。
我该怎么做?有可能做一个钩子/回调吗?也许

所以我找到了我自己问题的答案。您可以使用并发ruby库。
它有一个TimerTask对象和一个Observer工具。

您可以启动一个线程来监视上次修改的时间。您可能应该在它自己的类中实现这一点

Thread.new do
  last_changed_at = nil
  path = "/path/to/file.txt"

  loop do
    file_mod_time = File.mtime(path)

    @ui.draw if last_changed_at && file_mod_time != last_changed_at

    last_changed_at = file_mod_time

    sleep 1
  end
end

我怀疑线程块是否有权访问包含@ui的范围