当前位置: 首页 > article >正文

Golang中的timer和ticker

Golang中的timer和ticker

Timer

func AppTimer() {
	//	st := time.Now()
	//	// 创建timer,定时2s
	//	timer := time.NewTimer(2 * time.Second)
	//	timer.Stop()
	//	//<-timer.C
	//	timer.Reset(3 * time.Second)
	//	<-timer.C
	//	fmt.Println(time.Since(st))

	// AfterFunc函数,在duration后执行f函数
	//duration := time.Duration(1) * time.Second
	//f := func() {
	//	fmt.Println("我是小明")
	//}
	//
	//timer := time.AfterFunc(duration, f)
	//defer timer.Stop()
	//
	//time.Sleep(time.Second * 2)

	// After
	ch := make(chan string)
	go func() {
		time.Sleep(time.Second * 3)
		ch <- "test"
	}()

	select {
	case val := <-ch:
		fmt.Println(val)
	case <-time.After(time.Second * 3):
		fmt.Println("timeout")
	}
}

timer主要有创建、重置、停止这三个方法。timer主要作用就是定时去做某件事情。
其中有AfterFunc(duration,func(){})是在duration时间后执行func函数,自己创建一个goroutine去执行,不用自己创建。
After函数是用来判断功能是否超时,返回的是一个只读的通道。

ticker

func AppTicker() {
	ticker := time.NewTicker(time.Second * 1)

	ch := make(chan struct{})
	go func(ticker *time.Ticker) {
		defer ticker.Stop()
		for {
			select {
			case <-ch:
				fmt.Println("end")
				return
			case <-ticker.C:
				fmt.Println("ticker")
			}
		}
	}(ticker)
	time.Sleep(5 * time.Second)
	ch <- struct{}{}
	close(ch)
}

ticker在我看来就是一个时钟,我规定的时间是多少,那么只要我不关闭ticker那么,他就会周期性的执行。


http://www.kler.cn/a/285980.html

相关文章:

  • 航空制造领域中三维工艺技术的应用
  • c-数据结构(顺序表、链表)
  • Python 实现电子邮件加密技术解析与实用代码案例
  • mysql基础语法——个人笔记
  • 【研发日记】吃透新能源充电协议(一)——GB27930实例报文解析
  • 一加8T安装 Kali NetHunter 高阶教程 KB2000刷机 param预载失败 高通9008驱动签名 小米刻晴主题
  • 「bug」nvitop ERROR: Failed to initialize curses
  • VBA数据库解决方案第十四讲:如何在数据库中动态删除和建立数据表
  • 两个月冲刺软考——关系模式中的候选关键字与如何分解为无损连接并保持函数依赖的解法(例题讲解,看完必会)
  • 大数据之数据湖Apache Hudi
  • Nuxt 项目实战 - 15:自定义unocss规则,让编写样式更高效
  • [Tools: LoRA] Diffusers中Stable Diffusion的实现
  • 兴业证券基于Apache DolphinScheduler的应用实践
  • R数据科学练习题部分解答,持续更新
  • 【Python】2.基础语法(2)
  • 003、架构_详解(重点)
  • Mini-Monkey: Multi-Scale Adaptive Cropping for Multimodal Large Language Models
  • SpringBoot + Vue实现websocket
  • <Rust>egui学习之小部件(四):如何在窗口中添加滚动条Scroll部件?
  • 浅析Java线程池实现原理