From: Toshihiko Ichida Date: 2017-10-03T22:20:40+09:00 Subject: [ruby-list:50592] Fwd: Re: Re: [質問]thread内sleepコール 他threadよりsleep状態からrun状態にされた際、指定時間sleepさせるには? こんにちは、市田です。 あて先が投稿者のみになっていたのでメーリングリストへ投げておきます。 今まで気にしていなかったですが、cc に手入力する必要がありましたか? -------- Forwarded Message -------- Subject: Re: [ruby-list:50591] Re: [質問]thread内sleepコール 他threadよ りsleep状態からrun状態にされた際、指定時間sleepさせるには? Date: Tue, 3 Oct 2017 22:11:50 +0900 From: Toshihiko Ichida To: yamataka@u08.itscom.net こんにちは、市田です。 On 2017/09/29 19:38, yamataka@u08.itscom.net wrote: > 但し、exec_thread 再開後は、停止した際から、sleep設定時間の残り時間を > exec_threadは実行というような感じにしたいのです。 スレッドが stop から run に状態変化する際、sleep の途中からというのは ないのではと思います。 某 RTOS では sleep(&time) として引数をポインタ渡しして、イベント、 割り込みで sleep 解除された場合、どちらかを判定できるようなっていた のでそれに相当するものを自前で処理すれば、それなりの動きになります。 exec_thread = Thread.new do loop do puts "in exec_thread" n = 10 # sleep 100s puts "in exec_thread sleep start #{n}s" start = Time.now while n > 0 sleep(0.1) n -= 0.1 end puts "in exec_thread sleep end %.1f" % (Time.now - start) end end 「刻み」をどうするかは、どれくらい sleep するのかと、期待する時間精度 によって変わるでしょう。 また、元々のsleep時間以上、停止させられていた場合でも、「継続」するの が良いかどうかは考慮要と思います。 ではでは