是否可以在Ruby中执行本机计时器?
即。命令,然后是X时间后的另一个命令。
答案 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 management和reactor)