IRC BOT に Ruby 式評価する機能でもと。

def safe(lvl, tm=1)
result = nil
Thread::start(lvl, tm) do |level, time|
$SAFE = level
Thread::exclusive do
timeout(time) do
tl = Thread::list
result = yield
(Thread::list - tl).each {|th| th.join}
end
end
end.join
result
end

果たしてこれでいいかは不明だけど、たぶんちゃんと動いてる。Thread.start { loop { sleep 0.1 } }; Thread.start { loop {sleep 0.1} } みたいなのを投げても大丈夫。でも何かデッドロッ(あqwせdrftgyふじこlp

だめだ。上のじゃだめ。やっぱデッドロックしてるっぽい(Thread::critical = true してみればエラーになる。 exclusive はエラー処理やってるから分からないだけだ)。他のスレッドに処理が移ってスレッド作られると困るから exclusive してるんだけど、なんか上手くいってない。とりあえず今のところ他のスレッドで新しいスレッド作ることはないから exclusive をコメントアウト。

まぁ原因は (Thread::list - tl) なんだけど。何故か全部のスレッドが入ってる。

よく分からないけど書き換え。critical 設定するとダメくさいのでもうアレやこれや。

def safe(lvl, tm=1)
result = nil
tl = Thread::list
t = Thread::start(lvl) do |level|
$SAFE = level
result = yield
end.join(tm)
(Thread::list - tl).each {|th| th.kill}
raise TimeoutError unless t
result
end
  1. トップ
  2. prog
  3. Ruby 時間制限付きでユーザコードを実行する。

クラス移動を忘れてしまい、今から行ったら遅刻ついちゃうよぉ、ってことで図書室。

海辺のカフカ読み終わった。もっといろいろ空から降ってくるといいなぁとかねー(わらい

あーあ。何かワクワクすることないかな。

  1. トップ
  2. book
  3. nothing

商店街を走っていた。向かうところがあるのだ。日はまだ完全に昇りきっていない。にもかかわらず店は開いているし、人は多かった。

ときおり変な場所を通る。チーズを使った商品だけを扱うファーストフード店がある。緑の地に白の文字で店の名前が書いてある。数名しか座れないカウンター席と、二人がけのテーブル席が二つある。店内は殆ど満席だ。もちろん僕は急いでいる。食べずに裏側に抜ける出口をくぐる。階段状になっていて、妙に狭い。蝋でできた商品サンプルがある。出るときには周りにあるものに気をつけて出なければいけない。そして狭い商店街にまた出る。まだ先だ。まだ僕は走る必要がある。もっと先にある何処かに行かなくてはいけない。そこで誰かが待っている。

  1. トップ
  2. self
  3. 夢:チーズ専門ファーストフード店