我是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似乎不是我想要的;它旨在最大限度地利用可以采取的时间而不是最小值。
感谢您的投入!
答案 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中的线程非常轻,因此不会占用系统资源。