gpt4 book ai didi

ruby - 某种 Ruby "Interrupt"

转载 作者:数据小太阳 更新时间:2023-10-29 07:43:35 25 4
gpt4 key购买 nike

这就是我正在做的 -- 我有一个每分钟打印出信息的 ruby​​ 脚本。我还为陷阱设置了一个过程,这样当用户按下 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

现在代码本身是有效的并且运行良好,但是它做了很多无用的工作,尽可能频繁地检查 switch 的值。它会尽可能多地使用处理器(至少一个内核的 100%),因此非常浪费。我怎样才能做类似的事情,在不浪费大量周期的情况下经常更新事件?

感谢所有帮助并提前致谢!

最佳答案

您有多种解决方案。一种是使用 Thread::Queue,例如,如果您期望有许多信号并希望将它们中的每一个都作为一个事件进行处理。如果你真的只是在等待 ^C 发生而不与其他线程进行复杂的交互,我认为使用 Thread#wakeup 可能很简单:

c = Thread.current

Signal.trap("SIGINT") do
c.wakeup
end

while true
sleep
puts "wake"
end

关于ruby - 某种 Ruby "Interrupt",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com