2
我正在写一个mpd客户端使用ruby-mpd库。它有回调驱动的事件监听器,但我不知道如何等待回调被executed.o红宝石,等待回调
require 'ruby-mpd'
puts "started new thread"
mpd = MPD.new('localhost', '6600', callbacks: true)
# MPD#connect and MPD#disconnect fire the `:connection` event.
mpd.on(:connection) do |connection|
if connection
puts 'connected...'
else
puts 'disconnected'
end
end
mpd.connect
如果我通过线IRB connected
跑这条线mpd.connect
后会进行打印,但如果我运行作为一个脚本,它会在调用连接后立即退出(在回调被调用之前?) 在文件末尾添加sleep
调用也无济于事。
如何让此脚本永不退出并等待来自用户的终止信号?
好吧,我看着ruby-mpd如何实现回调。它产生一个线程,该线程遍历一个更新状态对象的块。如果对象发生变化,它会发出一个事件。
我想我的第一个例子错过了connection
属性的变化,所以甚至从未被解雇。
require 'ruby-mpd'
mpd = MPD.new('localhost', '6600', callbacks: true)
mpd.on(:connection) do
puts 'connected...'
end
mpd.on(:state) do |state|
puts state
end
mpd.on(:time) do |elapsed_time, total|
puts "#{elapsed_time}/#{total}"
end
mpd.connect
while true; end
你尝试'而真实的;结束? – 2014-12-06 22:17:34
'while true;结束“工作,我期望阻止和防止其他线程或过程运行。 – everett1992 2014-12-06 22:45:47
它浪费CPU时间,但你可以在那里发出一个小睡眠声明来帮助解决这个问题。它不会阻塞其他线程,这是拥有操作系统的主要因素之一。 – 2014-12-06 23:53:56