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

版权声明:版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/weixin_43851310/article/details/87885468
Timer

1. type Timer

type Timer struct {
    C <-chan Time
    // 内含隐藏或非导出字段
}

Timer类型代表单次时间事件。当Timer到期时,当时的时间会被发送给C,除非Timer是被AfterFunc函数创建的。

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

2. 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")              

3. time.Sleep

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

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

4. time.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需要另外写一个读通道读取数据,通常用来处理程序超时问题

5.time.Reset()

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

6.time.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 {
		;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43851310/article/details/87885468