从用户读取输入而不中断程序执行

时间:2018-01-31 00:35:40

标签: ruby

我试图在红宝石中做一个循环,每秒显示一个数字+ 1。我喜欢用户能够在他想要的时候输入。问题是我必须为循环输入一些内容才能继续。对不起,我的英语很糟糕。

p.s im使用在线编译器(repl.it)

1 个答案:

答案 0 :(得分:2)

您可以使用线程和一些简单的状态变量来完成您想要的任务,以便在线程之间进行通信。

在这个例子中,当结束计数循环时,我们使用变量@stop从主线程向计数线程发出信号。

此示例直接在repl.it上运行:
https://repl.it/repls/RingedIlliterateEnglishsetter

希望这能为您提供一些如何进行的建议。

@stop = false

thr = Thread.new {
  puts "Counting thread starting..."
  i = 0

  loop {
    i += 1
    puts i
    sleep 1
    break if @stop
  }

  puts "Counting thread exit..."
}

loop {
  puts "\nWaiting for input...\nType 'stop' to exit..."
  input = gets.chomp

  if input == "stop"
    puts "Stopping..."
    @stop = true
    break
  end
}

# Wait for counting thread to end
thr.join
puts "Main program exit..."