实现一个简单的 Timer

作者: Lupino | 来源:发表于2017-07-10 23:27 被阅读159次

使用 haskell 重新写 Periodic task system 时,我找不到一个合适的 timer 于是我就自己实现了一个。

data Timer = Timer { waiter :: MVar () }

newTimer :: IO Timer
newTimer = Timer <$> newEmptyMVar

Timer 初始化一个空的 waiter

initTimer :: Timer -> IO () -> IO ()
initTimer (Timer {..}) io = do 
  void $ forkIO $ forever $ do 
     takeMVar waiter 
     io

初始化 Timer 时使用 forever 让执行的 io 进入死循环,并用 MVar 的特性让 io 进行等待。

startTimer :: Timer -> Int -> IO ()
startTimer (Timer {..}) delay = do 
  void $ forkIO $ do 
    threadDelay delay 
    putMVar waiter ()

开始 TimerforkIO 出一个 thread, 利用 threadDelay 等待相应的时间后 解锁 waiter

这样子一个简单的 Timer 就出来了。

完整的代码见:Timer.hs

也欢迎读者们来 star Periodic task system

相关文章

  • 09- QuartZ

    Java中实现定时任务的几种方式: Timer: java.util.Timer, 一个JDK自带的处理简单的定时...

  • 实现一个简单的 Timer

    使用 haskell 重新写 Periodic task system 时,我找不到一个合适的 timer 于是...

  • Python 程序运行时间计时

    简单性能分析 Written By Python高效编程 装饰器实现: @timer 就相当于 timer(was...

  • springboot下使用定时任务的方式全揭秘

    1. 线程实现 利用线程可以设定休眠时间的方式可以实现简单的定时任务逻辑。 2. Timer类 Timer类允许调...

  • .net core实现基于cron表达式的任务调度

    .net core 实现基于 cron 表达式的任务调度 Intro 上次我们实现了一个简单的基于 Timer 的...

  • RXSwift(三)-Timer

    Timer的几种实现方式 CADisplayLink实现方式 系统Timer GCDTimer CADisplay...

  • Timer 的简单使用

    Timer 的简单使用: 按照我的理解,Timer 相当于一个线程任务调度器,new 一个 Timer 并且设置...

  • swift 定时器

    定时器的两种简单实现方式: 1.timer 2.GCD 上面两种方法以及实现简单的定时器,但是还有一个隐藏的问题,...

  • RXSwift中的timer浅析(一)

    OC创建一个timer很简单,直接使用NSTimer,然后加入到runloop就可以实现了: RXSwift中创建...

  • quick-cocos2d-x之Timer

    Moduleframework.client.api.Timer Timer 实现了一个计时器容器,用于跟踪应用中...

网友评论

    本文标题:实现一个简单的 Timer

    本文链接:https://www.haomeiwen.com/subject/imdxhxtx.html