[ruby-list:50592] Fwd: Re: Re: [質問]thread内sleepコール 他threadよりsleep状態からrun状態にされた際、指定時間sleepさせるには?

From: Toshihiko Ichida <dogatana@...>
Date: 2017-10-03 13:20:40 UTC
List: ruby-list #50592
こんにちは、市田です。

あて先が投稿者のみになっていたのでメーリングリストへ投げておきます。
今まで気にしていなかったですが、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 <dogatana@gmail.com>
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時間以上、停止させられていた場合でも、「継続」するの
が良いかどうかは考慮要と思います。

ではでは

In This Thread

Prev Next