searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Golang定时器(二)

2023-09-20 11:22:07
6
0

二、Golang定时器的停止

1、Timer

func Timer() {
	duration := time.Second
	timer := time.NewTimer(duration)
	cnt := 0
	for range timer.C {
		fmt.Println(time.Now())
		timer.Reset(duration)
		cnt++
		if cnt == 5 {
			timer.Stop()
			break
		}
	}
}

 

2、Tick

Tick实际上是对底层Ticker的封装,由于它直接返回的是<-chan Time类型,并没有像Timer或Ticker一样提供一个Stop函数来停止计时器,也由于chan是一个只有接收类型,因此也不能通过close直接关闭,因此这里是有可能产生内存泄漏现象

func Timer() {
	duration := time.Second
	cnt := 0
	for next := range time.Tick(duration) {
		fmt.Println(next)
		cnt++
		if cnt == 5 {
			break
		}
	}
}

 

3、Ticker

func Timer() {
	duration := time.Second
	ticker := time.NewTicker(duration)
	cnt := 0
	for next := range ticker.C {
		fmt.Println(next)
		cnt++
		if cnt == 5 {
			ticker.Stop()
			break
		}
	}
}
0条评论
0 / 1000
李****瑛
5文章数
0粉丝数
李****瑛
5 文章 | 0 粉丝
李****瑛
5文章数
0粉丝数
李****瑛
5 文章 | 0 粉丝
原创

Golang定时器(二)

2023-09-20 11:22:07
6
0

二、Golang定时器的停止

1、Timer

func Timer() {
	duration := time.Second
	timer := time.NewTimer(duration)
	cnt := 0
	for range timer.C {
		fmt.Println(time.Now())
		timer.Reset(duration)
		cnt++
		if cnt == 5 {
			timer.Stop()
			break
		}
	}
}

 

2、Tick

Tick实际上是对底层Ticker的封装,由于它直接返回的是<-chan Time类型,并没有像Timer或Ticker一样提供一个Stop函数来停止计时器,也由于chan是一个只有接收类型,因此也不能通过close直接关闭,因此这里是有可能产生内存泄漏现象

func Timer() {
	duration := time.Second
	cnt := 0
	for next := range time.Tick(duration) {
		fmt.Println(next)
		cnt++
		if cnt == 5 {
			break
		}
	}
}

 

3、Ticker

func Timer() {
	duration := time.Second
	ticker := time.NewTicker(duration)
	cnt := 0
	for next := range ticker.C {
		fmt.Println(next)
		cnt++
		if cnt == 5 {
			ticker.Stop()
			break
		}
	}
}
文章来自个人专栏
Golang语言
3 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0