我是全新的Haskell,我正试图弄清楚如何安排一个回调从现在开始被触发X秒(而不是更早)。
在搜索Google和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"函数,似乎可以做我想要的。然而,系统。事件似乎不再出现在Haskell和GHC的最新版本中。事件被标记为内部事件。
有没有我可以使用的用户空间替代品?我宁愿不使用用于GLUT的计时函数(除非这是实现我的目标的规定方式)和System。超时似乎不是我想要的;它的目的是为某件事所需要的时间设置一个最大值,而不是最小值。
谢谢你的意见!
我会在延迟后在它自己的线程上执行回调。这是一个GHC-ism。
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中的线程是非常轻量级的,所以这不会占用系统资源。