在Haskell中调度超时

时间:2013-03-27 23:11:42

标签: haskell callback timeout

我是Haskell的新手,我正在试图弄清楚如何安排回调从现在开始X秒(并且不久)。

在搜索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的最新版本中。事件被标记为内部。

我可以使用一些用户空间替代品吗?我不想使用用于GLUT的计时功能(除非这是实现我的目标的规定方式),并且System.Timeout似乎不是我想要的;它旨在最大限度地利用可以采取的时间而不是最小值。

感谢您的投入!

1 个答案:

答案 0 :(得分: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中的线程非常轻,因此不会占用系统资源。