是否可以在Ruby中执行本机计时器?

时间:2015-05-03 17:32:58

标签: ruby

是否可以在Ruby中执行本机计时器?

即。命令,然后是X时间后的另一个命令。

1 个答案:

答案 0 :(得分:2)

根据@Amadan的建议,您可以为延迟任务创建新线程。

...但是,请注意,如果主线程退出(如果您的应用已完成),任务将不会执行。

在这种情况下,您可能需要在主代码退出之前调用{... :ip-address "0:0:0:0:0:0:0:1"}

在下面的脚本中,主要脚本在线程有时间完成之前完成 - 永远不会打印'bye'这个词:

Thread#join

取决于您的应用程序和设计,您可能希望将应用程序的执行移动到子线程,或者编写事件反应器以异步运行所有内容。

这样,即使应用程序在任务完成之前完成,也可以确保任务运行。

例如,假设您的代码需要2秒钟才能完成任务并打印输出:

Thread.new {puts 'hi!'; sleep 5; puts 'bye'}

,你的任务需要5秒钟:

app_thread = Thread.new do
  sleep 2
  puts "app is done!"
end

通过添加以下内容,您可以确保在完成任务和应用程序之前进程不会退出:

task_thread = Thread.new {sleep 5; puts 'task is done.'}

尝试使用以下演示代码作为带有和不带app_thread.join task_thread.join 语句的脚本,看看会发生什么:

join

如果您正在研究事件反应器和计时器,您可以查看EventMachine code或 - 如果您正在寻找一个纯粹的红宝石示例,您可以深入研究Plezi framework's code也支持定时器在某种程度上(使用app_thread = Thread.new do sleep 2 puts "app is done!" end task_thread = Thread.new {sleep 5; puts 'task is done.'} app_thread.join task_thread.join run_every方法here,虽然它们基于event's managementreactor