ユーザーが選択した一定の時間が経過すると、タイマーが鳴るか、メッセージがポップアップするタイマーをRubyで作成したいと考えています。また、ユーザーが特定のこと (数学の問題など) を行うまでタイマーを鳴らすことは可能でしょうか?
9548 次
3 に答える
6
使用スレッド:
user_input = Thread.new do
print "Enter something: "
Thread.current[:value] = gets.chomp
end
timer = Thread.new { sleep 3; user_input.kill; puts }
user_input.join
if user_input[:value]
puts "User entered #{user_input[:value]}"
else
puts "Timer expired"
end
このコードでは 3 つのスレッドが実行されています。
user_inputユーザーから文字列を取得し、そのスレッド変数を設定するvalueスレッドtimer3 秒間スリープしてからスレッドを強制終了するuser_inputスレッドuser_input他の 2 つのスレッドを生成し、スレッドの終了を待機するメイン スレッド
スレッドがなければ、timerコードは、ユーザー入力を求めて続行するシングルスレッドのコードとまったく同じように機能するように見えます。2 つのスレッドの実行は、#join を使用してシリアル化されます。user_inputメイン スレッドは、のvalueスレッド変数を参照して、ユーザー インタラクションの結果を取得します。
スレッドを追加すると、timerスレッドがuser_input早期に終了します (この場合は 3 秒)。これが発生すると、user_inputスレッドはそのスレッド変数を設定していないvalueため、メイン スレッドがこの変数について問い合わせると nil を返します。user_inputこれは、ユーザーからの入力を受け入れたために終了したか、スレッドによって強制終了されたかをメインスレッドが判断する方法timerです。
于 2013-01-10T17:03:00.753 に答える
1
なんかこう思う?
puts "In how many Seconds you want me to beep?"
t = gets.to_i
sleep t
puts "\a WAKE UP!"
于 2013-01-10T08:05:29.843 に答える
1
私のやり方 :
comt = 0
while (comt < 10)
sleep(1)
comt = comt +1
puts comt
end#while
その表示: 1 2 3 ... 10
于 2017-11-26T12:16:07.333 に答える