1
A
回答
2
正如@Amadan所建议的那样,您可以为延迟任务创建一个新线程。
...但是,请注意,如果您的主线程退出(如果您的应用程序已完成),任务将不会执行。
在这种情况下,您可能需要在退出主代码之前调用Thread#join
。
在下面的脚本,线程来得及完成前主脚本完成 - 这个词“再见”永远不会被打印:根据您的应用和设计
Thread.new {puts 'hi!'; sleep 5; puts 'bye'}
,你可能想将应用程序的执行移动到子线程,或者编写一个事件反应器来异步运行所有内容。
这样,即使应用程序在任务完成之前完成,也可以确保该任务运行。
例如,假设您的代码需要2秒就可以完成一个任务,并打印出输出:
app_thread = Thread.new do
sleep 2
puts "app is done!"
end
,你的任务需要5秒:
task_thread = Thread.new {sleep 5; puts 'task is done.'}
你可以确保过程在完成任务和应用程序之前不退出:
app_thread.join
task_thread.join
试试看fo llowing演示代码使用和不使用join
报表,看看会发生什么脚本:
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
如果你正在寻找到事件反应器和定时器,可以观察到EventMachine code或 - 如果你正在寻找一个纯红宝石例如,可以挖成还支持定时器在一定程度上Plezi framework's code(使用run_every
和run_after
方法here,尽管它们是基于离event's management和reactor)
相关问题
- 1. 是否有可能在远程服务器上执行ruby-debug?
- 2. 是否有可能在Robotframework中执行钩子后,像Ruby/Cucumber
- 3. 是否有可能在后台运行计时器?
- 4. 是否有可能在后台运行全局计时器?
- 5. 是否有可能在Ruby中
- 6. 是否有可能更改线程在Ruby中正在执行的操作?
- 7. Shell脚本 - 是否有可能在后台执行.sh文件
- 8. AspectJ - 是否有可能执行建议?
- 9. 有可能确定ruby代码块是在http服务器下执行还是作为独立脚本执行?
- 10. 多个地方。是否有可能只能在LINQ中执行特定的WHERE?
- 11. 是否有可能在浏览器中运行Shell脚本
- 12. 是否有可能在需要类时执行方法?
- 13. 是否有可能在RPG Maker XP中更新Ruby版本
- 14. 是否有可能在运行时
- 15. 是否有平均执行时间的SQL服务器性能计数器?
- 16. 是否有可能无条件地执行Model.first
- 17. 是否有可能在Ruby中一步一步地运行程序?
- 18. Salesforce:在对象上创建计时器 - 是否有可能?
- 19. 是否有可能重复一个临时计时器?
- 20. 是否有可能在.NET中运行时编译和执行新代码?
- 21. 如何尽可能快地在Ruby中执行子进程?
- 22. 是否有可能在MySQL中执行一个字符串?
- 23. 是否有可能在PHP返回语句中执行赋值?
- 24. MvcContrib GridModel:是否有可能在GridModel中执行ActionSyntax
- 25. 是否有可能通过UIAutomation在UIWebView中执行JavaScript?
- 26. 是否有可能直接在视图中执行
- 27. 是否有可能在Flex中执行轻量级REST调用?
- 28. 是否有可能在F#中执行函数重载?
- 29. 是否有可能在Lua代码中执行hexdump
- 30. 是否有可能在Delphi 6 BDE TUpdateSQL中执行SQL过程?
当然 - '命令1;睡5次; command2'。 – Amadan
我想要一个定时器不睡觉,睡眠会停止剩余的代码。 – Jack
如果你的需求是松散的写的,你不会说什么,你没有说任何关于非阻塞或异步性的东西。 '命令1; Thread.new {sleep 5; command2}' – Amadan