定时器Timer和Ticker

Timer

Timer是一个定时器,代表未来的一个单一事件,通过Timer本身提供的管道将事件传递出去,言外之意是只执行一次。

Timer的数据结构如下:

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

import (
	"fmt"
	"time"
)

func main() {
	// 1.timer基本使用
	timer1 := time.NewTimer(2 * time.Second)
	t1 := time.Now()
	fmt.Printf("当前时间为:%v\n", t1)
	// 从定时器拿时间数据
	t2 := <-timer1.C
	fmt.Printf("定时两秒后:%v\n", t2)

	// 2.验证timer只能响应1次
	timer2 := time.NewTimer(time.Second)
	for {
	<-timer2.C
	fmt.Println("时间到,当前for循环不再执行")
	}

	// 3.timer实现延时的功能
	//(1)休眠一秒钟
	time.Sleep(time.Second)
	//(2)定时两秒钟
	timer3 := time.NewTimer(2 * time.Second)
	<-timer3.C
	fmt.Println("定时2秒到")
	//(3)延时两秒钟
	<-time.After(2*time.Second)
	fmt.Println("延时2秒到")

	// 4.停止定时器
	timer4 := time.NewTimer(2 * time.Second)
	go func() {
	<-timer4.C
	fmt.Println("定时器执行了")
	}()
	// 停止定时器
	b := timer4.Stop()
	if b {
	fmt.Println("timer4已经停止")
	}

	// 5.设置定时为三秒钟
	timer5 := time.NewTimer(3 * time.Second)
	// 重置定时器为一秒钟
	timer5.Reset(1 * time.Second)
	fmt.Println(time.Now())
	fmt.Println(<-timer5.C)

	for {

	}
}

Ticker

Ticker是周期性定时器,即周期性的触发一个事件,通过Ticker本身提供的管道将事件传递出去,言外之意是可以重复执行。

Ticker的数据结构:

type Ticker struct {
	C <-chan Time
	r runtimeTimer
}
package main

import (
	"fmt"
	"time"
)

func main() {
	 1.无限定时循环
	//ticker := time.NewTicker(1 * time.Second)
	//defer ticker.Stop()
	//for range ticker.C {
	//	fmt.Println("滴答滴答滴答")
	//}

	// 2.限定循环次数执行
	ticker := time.NewTicker(1 * time.Second)
	defer ticker.Stop()
	i := 0
	// 子协程
	go func() {
		for {
			i++
			fmt.Println(<-ticker.C)
			if i == 5 {
				//停止
				ticker.Stop()
			}
		}
	}()
	for {}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值