Планирование тайм-аута в Haskell - программирование
Подтвердить что ты не робот

Планирование тайм-аута в Haskell

Я новичок в 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, которая, похоже, делает то, что я хочу. Однако System.Event больше не находится в последних сборках Haskell и GHC.Event помечен как внутренний.

Есть ли какая-нибудь замена для пользовательского пространства, которую я мог бы использовать? Я бы предпочел не использовать функции синхронизации, предназначенные для GLUT (если только этот предписанный способ достижения моей цели), а System.Timeout не кажется совсем тем, чего я хочу; он предназначен для установки максимального количества времени, которое может принять какое-то время, а не минимум.

Спасибо за ваш вклад!

4b9b3361

Ответ 1

Я просто выполнил бы обратный вызов в своем потоке после задержки. Это 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 исключительно легки, поэтому это не приведет к связыванию системных ресурсов.