go之定时器

创建定时器

func main(){

	//前两句也可以用expirationTime:=time.After(time.Second*2)来代替
   timer:=time.NewTimer(time.Second*2)//定时2秒
   expirationTime:=<-timer.C//执行到此处会阻塞2秒
   if timer.stop==false{//当定时器过时,就会返回false
      fmt.Println("stoped!
      ")
   }
}

使用select实现超时机制

func main() {

	intChan:=make(chan int,1)
	go func(){
		time.Sleep(time.Second)
		intChan<-1
	}()
	select {
	case e:=<-intChan:
		fmt.Println("Receive : %v \n",e)
	case <-time.After(time.Millisecond*500):
		fmt.Println("timeout!")
	}
}

for实现超时机制

func main() {

	intChan:=make(chan int,1)
	go func(){
		for i:=0;i<5;i++{
			time.Sleep(time.Second)
			intChan<-i
		}
		close(intChan)
	}()
	timeout:=time.Millisecond*500
	var timer *time.Timer
	for{
		if timer==nil{
			timer=time.NewTimer(timeout)//第一次循环创建定时器
		}else{
			timer.Reset(timeout)//不是第一次循环就重置定时器
		}
		select{
		case e,ok:=<-intChan:
			if !ok{
				fmt.Println("end")
				return
			}
			fmt.Printf("Received: %v\n",e)
		case <-timer.C:
			fmt.Println("Timeout!")
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值