В настоящее время я работаю с программой, которая использует обратные вызовы в потоке для управления переменной класса для статического класса. Когда любой метод, управляющий объектом, называется нитью. Если кто-нибудь может взглянуть и рассказать мне, что я делаю неправильно, или как я мог бы сделать то же самое лучше, это было бы очень оценено. Ниже приведена простая программа, которая реплицирует проблему.Ruby thread dying при манипулировании данными
В phone.rb:
class Phone
@@ringer = "RingVibrateRingVibrateRing"
def self.get_ringer
return @@ringer
end
def set_ringer(new_ring)
@@ringer = new_ring
end
def self.calling_you(reached)
puts "Calling you. "
t = Thread.new {
sleep(3)
reached.call
Thread.exit
}
sleep(10)
puts "Thanks for calling me back!"
end
end
В CallTree.rb
require 'thread'
require 'C:\Users\mabauer\Desktop\phone.rb'
def calling_you_back
ring_sound = Phone.get_ringer
puts "#{ring_sound}"
# The following line is where issues occur, when commented it works fine
Phone.set_ringer("RingingRingingRinging")
ring_sound = Phone.get_ringer
puts "#{ring_sound}"
puts "I called you back."
end
begin
Phone.calling_you(method(:calling_you_back))
end