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

时间:2015-10-24 07:16:57

标签: ruby multithreading asynchronous

我在app.rb中有一个名为class App的ruby类 它有一个名为@ui的实例变量 如果调用@ui.draw,则重新绘制gui。

我想监视.txt文件,如果文件大小发生变化,我想调用上面提到的.draw方法。 我怎样才能做到这一点?是否可以进行钩子/回调

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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