golang_定时器: time包中Timer类型函数的用法介绍

Timer

实例

实现定时器的功能:
使用time.After函数,可以在指定时间后执行命令

func main() {
	timer := time.NewTimer(time.Second) // 1s后将时间写入通道
	fmt.Println(<-timer.C)              // 2020-02-25 16:31:49.2972707 +0800 CST m=+0.006019401

	timer2 := time.After(time.Second) // 和上面功能相同,使用After更为直观方便
	fmt.Println(<-timer2)
}

Timer结构体

type Timer struct {
   C <-chan Time
   r runtimeTimer
}

组成
time.Duration(时间长度,消耗时间)
time.Time(时间点)
time.C(放时间的channel通道)(注:Time.C:=make(chan time.Time))

NewTimer

func NewTimer(d Duration) *Timer
NewTimer创建一个Timer,它会在最少过去时间段d后到期,向其自身的C字段发送当时的时间。

time.NewTimer(时间间隔n):在指定的时间n后,系统自动将当前时间写入到Time结构体中的通道中

myTimer:=time.NewTimer(time.second)    //1秒以后将时间写入time通道中
<-myTimer.C							//读取通道中的时间
fmt.Println("timed out")              

timer实现的方法

Sleep

func Sleep(d Duration)
Sleep阻塞当前go程至少d代表的时间段。d<=0时,Sleep会立刻返回。

time.Sleep(100 * time.Millisecond)  //Millisecond毫秒,Microsecond微秒
fmt.Println("timed out")

After

func After(d Duration) <-chan Time
After会在另一线程经过时间段d后向返回值发送当时的时间。等价于NewTimer(d).C。

Timer := time.After(2 * time.Second)
<- Timer         //等价于NewTimer(d).C
fmt.Println("timed out")

定时2s,阻塞2s,2s后产生一个事件,往channel写内容

time.After需要另外写一个读通道读取数据,通常用来处理程序超时问题

Reset

func (t *Timer) Reset(d Duration) bool
Reset使t重新开始计时,(本方法返回后再)等待时间段d过去后到期。如果调用时t还在等待中会返回真;如果t已经到期或者被停止了会返回假。

Stop

func (t *Timer) Stop() bool
Stop停止Timer的执行。如果停止了t会返回真;如果t已经被停止或者过期了会返回假。Stop不会关闭通道t.C,以避免从该通道的读取不正确的成功。

func main(){
	myTimer:=time.NewTimer(time.Second*5)		//创建定时器,间隔5秒
	//myTimer.Reset(time.Second)				//重置定时器1秒
	go func() {
		<-myTimer.C
		fmt.Println("Golang")
	}()
	//myTimer.Stop()			//关闭定时器
	for {
		;
	}
}

你可能感兴趣的:(golang,#,golang_浅析go文档)