ユーザーが選択した一定の時間が経過すると、タイマーが鳴るか、メッセージがポップアップするタイマーを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
スレッドtimer
3 秒間スリープしてからスレッドを強制終了する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 に答える