- blogs:
- cles::blog
2010/10/18

Rubyのスレッドをたたき起こす

Rubyでsleepを呼んで眠っているスレッドむりやり実行状態に戻す方法(JavaだとThread.interrupt()にあたるもの)がないかと思って調べていたら、灯台下暗しでリファレンスマニュアルにThread#runで実行を再開できるとちゃんと書いてありました。sleepは組み込み関数ですが、runはThreadクラスにあるのでちょっと分かりづらいですね。
sleep([sec])
sec 秒だけプログラムの実行を停止します。sec には浮動小数点数も指定できます。sec が省略された場合、他スレッドからの Thread#run などで明示的に起こさない限り永久にスリープします。戻り値は実際に停止していた秒数(整数)です。
確かに下記のようなコードを書いてみたらsleepがキャンセルされてスレッドが再開されることが確認できました。
これでsleepで眠っているThreadをjoinしようとしてプログラムが固まってしまうという状況を回避できそうです。
sleeptest.rb
require 'thread'
t = Thread.new do
sleep 1000
puts "hoge"
end
puts "join...."
t.run
t.join
puts "done!"
実行結果
$ ruby sleeptest.rb
join....
hoge
done!
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3855
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(113239)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(111861)
3 . 年次の人間ドックへ(111387)
4 . 2023 年分の確定申告完了!(1つめ)(110973)
5 . 三菱鉛筆がラミーを買収(110860)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(111861)
3 . 年次の人間ドックへ(111387)
4 . 2023 年分の確定申告完了!(1つめ)(110973)
5 . 三菱鉛筆がラミーを買収(110860)
cles::blogについて
Referrers