put只在线程/循环中运行一次

时间:2016-02-25 19:39:39

标签: ruby multithreading output

我正在制作一个名为'Pushback'的红宝石街机游戏,你将每个数字推回零,游戏的目标是不让任何数字超过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

1 个答案:

答案 0 :(得分:2)

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

您可以在此处查看a good Ruby multi-threading explanation