定时器Timer和Ticker
生活随笔
收集整理的這篇文章主要介紹了
定时器Timer和Ticker
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Timer
Timer是一個定時器,代表未來的一個單一事件,通過Timer本身提供的管道將事件傳遞出去,言外之意是只執行一次。
Timer的數據結構如下:
type Timer struct {C <-chan Timer runtimeTimer } package mainimport ("fmt""time" )func main() {// 1.timer基本使用timer1 := time.NewTimer(2 * time.Second)t1 := time.Now()fmt.Printf("當前時間為:%v\n", t1)// 從定時器拿時間數據t2 := <-timer1.Cfmt.Printf("定時兩秒后:%v\n", t2)// 2.驗證timer只能響應1次timer2 := time.NewTimer(time.Second)for {<-timer2.Cfmt.Println("時間到,當前for循環不再執行")}// 3.timer實現延時的功能//(1)休眠一秒鐘time.Sleep(time.Second)//(2)定時兩秒鐘timer3 := time.NewTimer(2 * time.Second)<-timer3.Cfmt.Println("定時2秒到")//(3)延時兩秒鐘<-time.After(2*time.Second)fmt.Println("延時2秒到")// 4.停止定時器timer4 := time.NewTimer(2 * time.Second)go func() {<-timer4.Cfmt.Println("定時器執行了")}()// 停止定時器b := timer4.Stop()if b {fmt.Println("timer4已經停止")}// 5.設置定時為三秒鐘timer5 := time.NewTimer(3 * time.Second)// 重置定時器為一秒鐘timer5.Reset(1 * time.Second)fmt.Println(time.Now())fmt.Println(<-timer5.C)for {} }Ticker
Ticker是周期性定時器,即周期性的觸發一個事件,通過Ticker本身提供的管道將事件傳遞出去,言外之意是可以重復執行。
Ticker的數據結構:
type Ticker struct {C <-chan Timer runtimeTimer } package mainimport ("fmt""time" )func main() { 1.無限定時循環//ticker := time.NewTicker(1 * time.Second)//defer ticker.Stop()//for range ticker.C {// fmt.Println("滴答滴答滴答")//}// 2.限定循環次數執行ticker := time.NewTicker(1 * time.Second)defer ticker.Stop()i := 0// 子協程go func() {for {i++fmt.Println(<-ticker.C)if i == 5 {//停止ticker.Stop()}}}()for {} }總結
以上是生活随笔為你收集整理的定时器Timer和Ticker的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Select多路复用
- 下一篇: 并发安全Sync包的使用