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

本文深入探讨了Go语言中定时器的实现与应用,包括使用time.After和time.NewTimer进行定时任务的设置,以及Timer结构体的详细解析。文章还介绍了Sleep、After、Reset和Stop等方法的使用场景,为开发者提供了丰富的实践指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 {
		;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值