[ruby-list:50591] Re: [質問]thread内sleepコール 他threadよりsleep状態からrun状態にされた際、指定時間sleepさせるには?
From:
<yamataka@...08.itscom.net>
Date:
2017-09-29 10:38:38 UTC
List:
ruby-list #50591
山口と申します。
質問内容と質問の仕方がが良くなかったような気がするので、
再度質問し直しさせていただきます。
yama@roswell:~$ uname -a
CYGWIN_NT-6.3 JPC20165182 2.6.0(0.304/5/3) 2016-08-31 14:32 x86_64
Cygwin yama@roswell:~$ ruby --version ruby 2.2.5p319 (2016-04-26
revision 54774) [x86_64-cygwin]
の環境です。
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