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