puts 在 thread/loop 中只运行一次

puts only runs once in a thread/loop

我在 ruby 制作了一款叫作 'Pushback' 的街机游戏,你把每个数字都推回零,而游戏的 objective 是不让任何numbers exceeded 9. 但是...屏幕刷新有问题,屏幕输出线程只给出开始状态(000),除此之外不输出任何其他内容。

代码在这里:

$screen = '000'
Thread.new do
  loop do
    puts $screen
    sleep 1
    $screen[0] = ($screen[0].to_i + 1).to_s
    $screen[1] = ($screen[1].to_i + 1).to_s
    $screen[2] = ($screen[2].to_i + 1).to_s
    clear
  end
end
loop do
  case gets.chomp.downcase
  when ?l
    $screen[0] = '0'
  when ?m
    $screen[1] = '0'
  when ?r
    $screen[2] = '0'
  end
end

编辑:

(1)我试过在线程外创建一个函数,然后在线程内调用它,但还是不行。

(2) 答案之一是关于Mutex。我用过它并且有效。这是最终代码

https://gist.github.com/nolcay/c6572089c8292331e2f3

我建议在使用时使用互斥锁来锁定您的 $screen 变量。

你可以在这里看到a good Ruby multi-threading explanation