2013-03-27 8 views
16

私はハスケルにとってはまったく新しく、コールバックのスケジュールをどのようにしてX秒後に(そして早く)開始するかを考えようとしています。Haskellでタイムアウトをスケジューリングする

HoogleとGoogleの検索では、私が発見した:

http://www.haskell.org/ghc/docs/latest/html/libraries/base/GHC-Event.html

など:

http://hackage.haskell.org/packages/archive/base/4.3.1.0/doc/html/System-Event.html

をこれらの両方があるようです "registerTimeout" 機能を備えています私が望むものしかし、System.EventはHaskellの最新ビルドには含まれていないように見え、GHC.Eventは内部としてマークされています。

使用できるユーザースペースの代替品はありますか?私は(それは私の目標を達成するための規定された方法でない限り)GLUTのために意図されたタイミング関数を使用しないことを好むであろうし、System.Timeoutは私が望むものにかなり見えない。最小限ではなく何かを取ることができる時間の最大値を設定することを意図しています。

ありがとうございました!

答えて

19

私は、遅れて自分のスレッドでコールバックを実行するだけです。これはGHCのアイムです。

import Control.Concurrent (forkIO, threadDelay) 

-- | Run the callback after the given number of milliseconds. 
runAfterDelay :: Int -> IO() -> IO() 
runAfterDelay t f = forkIO (threadDelay t >> f) 

GHCのスレッドは非常に軽量なので、システムリソースを縛りません。

+1

これは意味があります。どうもありがとう。私はスレッドを避けるようにしていました。メモリ消費が大きな問題になることなく、どれだけ多くのプロセスを一度に見ることができるのか、興味があります。ベンチマークを開始する時間。 – zslayton

+3

@ザック:オーバヘッドを気にしないでください、それは非常に小さいです。参照してください:http://stackoverflow.com/questions/5847642/haskell-lightweight-threads-overhead-and-use-on-multicores –

+0

Whoa、そうです。私はこのハスケルのビジネスが本当に好きになっています。 – zslayton

関連する問題