Вот исправленная версия вашего примера:
STDOUT.sync = true
loop_a_stopped = true
loop_a = Thread.new do
loop do
Thread.stop if loop_a_stopped
# Do stuff
sleep(1)
end
end
loop_b = Thread.new do
loop do
print "> "
response = gets
case response.strip.downcase
when "start"
loop_a_stopped = false
loop_a.wakeup
when "stop"
loop_a_stopped = true
when "exit"
# Terminate thread A regardless of state
loop_a.terminate!
# Terminate this thread
Thread.exit
end
end
end
loop_b.join
loop_a.join
Управление потоками может быть немного сложнее. Остановка потока не завершает его, просто удаляет его из планировщика, так что вам действительно нужно удалить его с помощью Thread # terminate! прежде чем он действительно закончен.