ada*_*m_0 4 ruby signals exception-handling
所以这就是我正在做的事情 - 我有一个ruby脚本,每分钟打印出信息.我还为陷阱设置了一个proc,这样当用户点击ctrl-c时,进程就会中止.代码看起来像这样:
switch = true
Signal.trap("SIGINT") do
switch = false
end
lastTime = Time.now
while switch do
if Time.now.min > lastTime.min then
puts "A minute has gone by!"
end
end
Run Code Online (Sandbox Code Playgroud)
现在代码本身是有效的并且运行良好,但它会做很多无用的工作,switch尽可能经常地检查它的值.它耗尽了尽可能多的处理器(至少是一个核心的100%),所以它非常浪费.我怎样才能做类似的事情,每隔一段时间更新一次事件,而不浪费大量的周期?
所有帮助表示赞赏,并提前致谢!
你有几个解决方案.一种是使用Thread :: Queue,如果你期望很多信号,并希望将每个信号作为一个事件处理,例如.如果您真的只是在等待^ C发生而没有与其他线程的复杂交互,我认为使用Thread #wakeup可能很简单:
c = Thread.current
Signal.trap("SIGINT") do
c.wakeup
end
while true
sleep
puts "wake"
end
Run Code Online (Sandbox Code Playgroud)