您的位置 首页 golang

Golang time ticker定时器

定时器

定时器在日常开发中使用非常广泛,设置心跳,周期计算等都需要定时器。主要通过time ticker实现。

type Ticker //主要用来按照指定的时间周期来调用函数或者计算表达式,通常的使用方式是利用go新开一个协程使用,它是一个定时器。

func NewTicker(d Duration) *Ticker //新生成一个ticker,此Ticker包含一个channel,此channel以给定的duration发送时间。

func (t *Ticker) Stop() //用于关闭相应的Ticker,但并不关闭channel。

Ticker中的C为数据类型为Time的单向管道,只能读,不能写。

使用方式:

func timer() {

timer := time.NewTicker(1 * time.Second)

for {

select {

case <-timer.C:

xxx() //执行我们想要的操作

}

}

}

注意:time.C(放时间的channel通道)(注:Time.C:=make(chan time.Time))

使用时间控制停止ticker:

func main() {

ticker := time.NewTicker(time.Millisecond * 500)

go func() {

for t := range ticker.C {

fmt.Println(“Tick at”, t)

}

}()

time.Sleep(time.Millisecond * 1500) //阻塞,则执行次数为sleep的休眠时间/ticker的时间

ticker.Stop()

fmt.Println(“Ticker stopped”)

}

结果:

Tick at 2018-03-17 21:53:11.3355576 +0800 CST m=+0.500201001

Tick at 2018-03-17 21:53:11.8397587 +0800 CST m=+1.004402101

Ticker stopped

使用channel控制停止ticker:

ticker := time.NewTicker(time.Millisecond * 500)

c := make(chan int,num) //num为指定的执行次数

go func() {

for t := range ticker.C {

c<-1

fmt.Println(“Tick at”, t)

}

}()

ticker.Stop()

这种情况下,在执行num次以Ticker时间为单位的函数之后,c channel中已满,以后便不会再执行对应的函数.

范例:

import(

“fmt”

“time”

)

func main() {

ticker := time.NewTicker(10 * time.Second)

for i := 0; i < 10; i++ {

time := <-ticker.C //把信道中的时间按照约定的周期传入

fmt.Println(time.String())

}

}

结果:

2018-03-17 21:43:34.9435209 +0800 CST m=+10.001617701

2018-03-17 21:43:44.9451385 +0800 CST m=+20.003235301

2018-03-17 21:43:54.9457562 +0800 CST m=+30.003853001

2018-03-17 21:44:04.9463738 +0800 CST m=+40.004470601

2018-03-17 21:44:14.9469914 +0800 CST m=+50.005088201

……

文章来源:智云一二三科技

文章标题:Golang time ticker定时器

文章地址:https://www.zhihuclub.com/86940.shtml

关于作者: 智云科技

热门文章

网站地图