Go语言实现定时器的方法详解
目录
本文主要介绍了Go语言实现定时器的两个方法,包括一次性定时器(Timer)和周期性定时器(Ticker),一次性定时器:newTimer()创建一个能够往当前通道在持续duration时间之后发送当前时间的Timer。
Timer
Timer
是一种单一事件的定时器,即经过指定的时间后触发一个事件,因为Timer
只执行一次就结束,所以称为单一事件,这个事件通过其本身提供的channel
进行通知触发。
使用示例
package main import ( "fmt" "time" ) func main() { //1. timer基本使用 timer1 := time.NewTimer(4 * time.Second) t1 := time.Now() fmt.Printf("t1:%v\n", t1) t2 := <-timer1.C fmt.Printf("t2:%v\n", t2) fmt.Println("2s到了") //2. timer只能响应1次, 到截止时间会将时间发给通道 //timer2 := time.NewTimer(time.Second) //for { // <-timer2.C // fmt.Println("时间到", t2) //} // 3.timer实现延时的功能 time.Sleep(time.Second) fmt.Println(time.Now()) timer3 := time.NewTimer(2 * time.Second) <-timer3.C fmt.Println("2秒到了") fmt.Println(time.Now()) <-time.After(2 * time.Second) fmt.Println("2秒到了") // 4.停止定时器 timer4 := time.NewTimer(4 * time.Second) b := timer4.Stop() if b { fmt.Println("timer4关闭") } // 5.重置定时器 timer5 := time.NewTimer(5 * time.Second) timer5.Reset(3 * time.Second) fmt.Println(time.Now()) fmt.Println(<-timer5.C) time.Sleep(time.Second * 30) }
Tiker
Tiker是一个定时触发的计时器,它会以一个间隔(interval)往通道发送当前时间,而通道的接收者可以以固定的时间间隔从通道中读取时间:
package main import ( "fmt" "time" ) func main() { // 1.获取ticker对象 ticker := time.NewTicker(2 * time.Second) i := 0 // 子协程 go func() { for { i++ fmt.Println(<-ticker.C) if i == 4 { //停止ticker ticker.Stop() } } }() time.Sleep(time.Second * 20) }
原文地址:https://blog.csdn.net/qq_39445165/article/details/124285999