16

我是 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.Event 被标记为内部。

我可以使用一些用户空间替代品吗?我不希望使用用于 GLUT 的计时功能(除非这是实现我目标的规定方式),而且 System.Timeout 似乎不是我想要的;它旨在将某件事可能花费的时间设置为最大值,而不是最小值。

谢谢您的意见!

4

1 回答 1

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 中的线程非常轻量级,因此不会占用系统资源。

于 2013-03-27T23:29:29.340 回答