定时器
Timer-只响应一次
Timer 是一个定时器,代表未来的一个单一事件,可以告诉 timer 要等待多长时间,它提供一个 channel,在将来的那个时间那个 channel 提供了一个时间值。
- 2s后,往
timer.C
写数据,有数据以后就会进行读取 - 没有数据之前channel会阻塞
- 时间到了只会向通道中写一次数据。
通过timer实现延时功能
package main
import (
"fmt"
"time"
)
// 通过timer实现延时功能
func main() {
timer := time.NewTimer(2 * time.Second)
<-timer.C
fmt.Println("时间到")
}
- 等价于sleep
func main() {
time.Sleep(2 * time.Second)
fmt.Println("时间到")
}
- 还可以通过time.After,定时一定的时间,然后产生一个事件。
func main() {
<-time.After(2 * time.Second)
fmt.Println("时间到")
}
停止定时器
timer.Stop()
- 主协程停止定时器以后,子协程的定时器无效,就会一直阻塞。
重置定时器
timer.Reset(1 * time.Second)
- 原先的三秒钟就无效了。
Ticker
Ticker 是一个定时触发的计时器,它会以一个间隔(interval)往 channel 发送一个事件(当前时间),而 channel 的接收者可以以固定的时间间隔从 channel 中读取事件。
注意,ticker会响应多次
ticker.Stop()
可以关闭ticker定时器
package main
import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(1 * time.Second)
i := 0
for {
<-ticker.C
i++
fmt.Println("i=", i)
if i == 5 {
ticker.Stop()
break
}
}
}