Go语言基础之定时器!
发表于更新于
编程语言GoGo语言基础之定时器!
月伴飞鱼
Go提供了两种方式的计时器:
固定时间定时器
1 2 3 4 5 6 7 8 9 10 11 12
| func main() { timer := time.NewTimer(2 * time.Second) fmt.Println("当前时间:", time.Now())
t := <- timer.C fmt.Println("t = ",t) }
|
上面的示例演示了如何使用定时器延时两秒执行一项任务。
上面的示例也可以写成下面的形式。
1 2 3 4 5 6
| func main() { fmt.Println("开始计时") <- time.After(2 * time.Second) fmt.Println("时间到") }
|
提前终止计时器
计时器被中途stop掉了,被延时的goroutine
将永远得不到执行,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| func main() { timer := time.NewTimer(3*time.Second) go func(){ <- timer.C fmt.Println("子goroutine可以打印了,因为定时器的时间到了") }() timer.Stop()
time.Sleep(6*time.Second) fmt.Println("Game Over") }
|
中途重置定时器
下面的例子中,timer在配置为延时10秒执行后
需要注意的是:
如果在reset的一刹那,定时器已经到时或者已被stop掉,则reset是无效的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| func main() { timer := time.NewTimer(10 * time.Second)
ok := timer.Reset(1 * time.Second) fmt.Println("OK = ", ok, time.Now())
t := <- timer.C fmt.Println("时间到", t) }
|