版权声明:版权声明:本文为博主原创文章,转载请附上博文链接! 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 {
;
}
}