haskell-ja > Archives > 2012/07/06

2012/07/06 04:21:20 UTCmasterq
#
simpleHttpなどを使ってURLからばかデカいデータを読み込んでいる際、途中で中断したい場合にはどうするのが正しいでしょうか。
#
timeoutThread :: IO ()
timeoutThread = do
  threadDelay $ 1000 * 1000 * 5
  putStrLn "Timeout"
  exitWith $ ExitFailure 4
#
こんなスレッドを作って、forkIOしてプロセス全体を落せばいいのかなと思ったのですが、readそのものをキャンセルすることはできないみたいです。。。
2012/07/06 04:32:45 UTCkazu
#
System.Timeout.timeout を使うのではダメですか?
#
read に渡すバッファーは、ある程度の大きさで、繰り返している read をどうやって止めるかという話ですよね?
2012/07/06 05:49:01 UTCmasterq
#
ありがとうございます。System.Timeout.timeoutで止められました。自分のthreadidにthrowすれば良かったんですね。 forkIO (threadDelay n >> throwTo pid ex)
#
"例外"と聞くだけで逃げ出す性格になってしまったので、ちゃんとGHCの例外について調べておこうと思います...
2012/07/06 05:58:56 UTCkazu
#
飲み屋であれ程「GHCの非同期例外は安全だ」と説明したじゃないですか!