Go并发编程(八)go定时器

Go并发编程(八)go定时器,第1张

概述文章目录Go并发编程(八)go定时器标准定时器timer循环定时器TickGo并发编程(八)go定时器Go的标准包time里提供了两种定时器,一种是标准定时器,另一种是循环定时器。标准定时器timertimer在到达指定时间时仅仅触发一次,当timer到期时会将当前时间发送到自己的C管道,timer实例

文章目录Go并发编程(八)go定时器标准定时器timer循环定时器Tick

Go并发编程(八)go定时器

Go的标准包time里提供了两种定时器,一种是标准定时器,另一种是循环定时器。

标准定时器timer

timer在到达指定时间时仅仅触发一次,当timer到期时会将当前时间发送到自己的C管道,timer实例必须通过NewTimer或AfterFunc

	timer := time.NewTimer(time.Second * 3)

延迟执行:

第一种实现

time.sleep(3 * time.Second)

使用After模拟超时:After到达指定时间后会向内置C管道发送当前时间

func TestMyTime()  {	c := make(chan struct{})	go func() {		time.Sleep(3 * time.Second)		<- c	}()	// select case可以是发送可以是接收	select {	case c <- struct{}{}:fmt.Println("channel")	case <- time.After(5 * time.Second):fmt.Println("超时啦")		close(c)	}}

第二种实现:使用AfterFunc,返回timer对象,可用来关闭定时器

func TestTimeAfterFunc()  {	c := make(chan struct{})	timer := time.AfterFunc(3 * time.Second, func() {		fmt.Println("经过3秒后执行该函数")		c <- struct{}{}	})	<- c	timer.Stop()}
循环定时器Tick

time包中的循环定时器都是永久执行的定时器,直到手动关闭它。time中没有可以指定次数的循环定时器。会根据时间频率不断发送时间到返回的管道

func TestTick()  {	ticker := time.NewTicker(time.Second * 1)	wg := sync.WaitGroup{}	wg.Add(10)	for t := range ticker.C {		fmt.Printf("Backup at %s\n", t)		wg.Done()	}	wg.Wait()}
总结

以上是内存溢出为你收集整理的Go并发编程(八)go定时器全部内容,希望文章能够帮你解决Go并发编程(八)go定时器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存