Go计时器

1. NewTimer

package main

import (
	"time"
	"fmt"
)

func main() {
	/*
	1. func NewTimer(d Duration) *Timer
			创建一个计时器,d时间以后触发
	 */

	timer := time.NewTimer(3 *time.Second) //3秒
	fmt.Printf("%T\n",timer) //*time.Timer
	fmt.Println(time.Now()) //2019-08-15 11:32:17.065452 +0800 CST m=+0.000614404

	//此处等待channel中的数值,会阻塞3秒
	ch2 := timer.C
	//3秒之后的时间
	fmt.Println(<-ch2 ) //2019-08-15 11:32:20.068101 +0800 CST m=+3.003327715


	//新建一个计时器
	timer2 := time.NewTimer(5*time.Second)
	//开始goroutine,来处理触发后的事件
	go func() {
		<- timer2.C
		//5秒之后打印下面的
		fmt.Println("Timer 2 结束了。。。开始。。。。")
	}()
	
	//取消计时器
	time.Sleep(3*time.Second)
	flag := timer2.Stop()
	if flag{
		fmt.Println("Timer 2 停止了。。。")
	}
}

2. After

package main

import (
	"time"
	"fmt"
)

func main() {
	/*
	 2. func After(d Duration) <-chan Time
			返回一个通道:chan,存储的是d时间间隔之后的当前时间

		相当于:return NewTimer(d).C
	 */
	ch :=  time.After(3 *time.Second)
	fmt.Printf("%T\n",ch) //<-chan time.Time
	fmt.Println(time.Now()) //2019-08-15 11:43:33.941039 +0800 CST m=+0.000537462


	time2 := <-ch
	fmt.Println(time2) //2019-08-15 11:43:36.945775 +0800 CST m=+3.005338577
}

  

posted @ 2020-02-03 06:50  1769987233  阅读(191)  评论(0编辑  收藏  举报