Timer
Timer是一个定时器,代表将来的一个繁多事件,通过Timer自身提供的管道将事件传递进来,话中有话是只执行一次。
Timer的数据结构如下:
type Timer struct { C <-chan Time r 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.C fmt.Printf("定时两秒后:%v\n", t2) // 2.验证timer只能响应1次 timer2 := time.NewTimer(time.Second) for { <-timer2.C fmt.Println("工夫到,以后for循环不再执行") } // 3.timer实现延时的性能 //(1)休眠一秒钟 time.Sleep(time.Second) //(2)定时两秒钟 timer3 := time.NewTimer(2 * time.Second) <-timer3.C fmt.Println("定时2秒到") //(3)延时两秒钟 <-time.After(2*time.Second) fmt.Println("延时2秒到") // 4.进行定时器 timer4 := time.NewTimer(2 * time.Second) go func() { <-timer4.C fmt.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 Time r 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 {}}