yama@roswell:$ uname -a$ ruby --version ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-cygwin]
CYGWIN_NT-6.3 JPC20165182 2.6.0(0.304/5/3) 2016-08-31 14:32 x86_64 Cygwin
yama@roswell:
の環境で、
2つのthread
input_thread,exec_thread
を用いて、
input_threadにて、標準入力より p がタイプされると、
exec_thread を thread.sleep で、sleep状態にしています。
(下記コードの (*1) の部分)
exec_thread 内で、sleepコールで、既にsleep状態になっている場合
(下記コードの(*2)の部分)
sleepコールで、指定した時間が来れば、run状態になりますが...
exec_threadそのものの動きを止めたい、すなわちsleepコールの動きのそのもの
を止めたい場合は、
どうすればよいのかご教示いただけますでしょうか?
簡単に説明すると、
input_thread で、標準入力より p がタイプされると、exec_thread を停止。
また、p がタイプされると、exec_thread 再開。
但し、exec_thread 再開後は、停止した際から、sleep設定時間の残り時間を
exec_threadは実行というような感じにしたいのです。
exec_thread = Thread.new do loop do puts "in exec_thread" n = 30 # sleep specified secs puts "in exec_thread sleep start #{n}s" sleep(n) # (*2) puts "in exec_thread sleep end" end end input_thread = Thread.new do loop do ret = STDIN.gets case ret when /^ *q *$/ puts "get q" exit when /^ *p *$/ puts "get p" # (*1) exec_thread.stop end end end exec_thread.join input_thread.join
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。