Golang 定时器timer和ticker

两种类型的定时器:ticker和timer。两者有什么区别呢?请看如下代码:

ticker

package main

import (
        "fmt"

        "time"
)


func main() {

        d := time.Duration(time.Second*2)

        t := time.NewTicker(d)
        defer t.Stop()

        for {
                <- t.C

                fmt.Println("timeout...")
        }
}


output:

timeout…

timeout…

timeout…

解析

ticker只要定义完成,从此刻开始计时,不需要任何其他的操作,每隔固定时间都会触发。

timer


package main

import (
        "fmt"

        "time"
)


func main() {

        d := time.Duration(time.Second*2)

        t := time.NewTimer(d)
        defer t.Stop()

        for {
                <- t.C

                fmt.Println("timeout...")
        // need reset
        t.Reset(time.Second*2)
        }
}


output:

timeout…

timeout…

timeout…

解析

使用timer定时器,超时后需要重置,才能继续触发。

ticker 例子展示

package main

import (
        "fmt"
        "time"
)


func main() {

        t := time.NewTicker(3*time.Second)
        defer t.Stop()

        fmt.Println(time.Now())
        time.Sleep(4*time.Second)


        for {

                select {

                case <-t.C:

                        fmt.Println(time.Now())

                }


        }

}


output:

2018-04-02 19:08:22.2797 +0800 CST

2018-04-02 19:08:26.3087 +0800 CST

2018-04-02 19:08:28.2797 +0800 CST

2018-04-02 19:08:31.2797 +0800 CST

2018-04-02 19:08:34.2797 +0800 CST
————————————————
版权声明:本文为CSDN博主「翔云123456」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lanyang123456/article/details/79794183

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值