首页 > 其他分享 >Golang当中的定时器

Golang当中的定时器

时间:2024-09-04 10:47:06浏览次数:3  
标签:delay 定时器 func 当中 interval Timer Golang ms time

 参考:https://blog.csdn.net/qq_56999918/article/details/130499688

 

  1 package main
  2 
  3 import (
  4     "fmt"
  5     "time"
  6 )
  7 
  8 func Timer_stop(t *time.Timer) {
  9     if nil != t {
 10         t.Stop()
 11     }
 12 }
 13 
 14 
 15 func Timer_interval(delay_ms int, interval_ms int, fn func() ) *time.Timer {
 16     fmt.Printf("Timer_interval delay_ms=%d, interval_ms=%d\n", delay_ms, interval_ms)
 17     t:= time.NewTimer(time.Duration(delay_ms) * time.Millisecond)
 18     go timer_interval_do(t, fn, interval_ms)
 19     
 20     return t
 21 }
 22 
 23 func timer_interval_do(t *time.Timer, fn func(), interval_ms int) {
 24     for {
 25         select {
 26             case <- t.C:
 27             fmt.Println("timer_do timer triggered")
 28             t.Reset(time.Millisecond * time.Duration(interval_ms))
 29             fn()
 30         }
 31     }
 32 }
 33 
 34 func Timer_once(delay_ms int, fn func() ) *time.Timer {
 35     fmt.Printf("Timer_interval delay_ms=%d\n", delay_ms)
 36     t:= time.NewTimer(time.Duration(delay_ms) * time.Millisecond)
 37     go timer_once_do(t, fn)
 38     
 39     return t
 40 }
 41 
 42 func timer_once_do(t *time.Timer, fn func()) {
 43     for {
 44         select {
 45             case <- t.C:
 46             fmt.Println("timer_do timer triggered")
 47             t.Stop()
 48             fn()
 49         }
 50     }
 51 }
 52 ///////////////////////////////////////////////////////  以下是测试用例
 53 var mydo_is_doing = 0
 54 
 55 func mydo_thread() {
 56 
 57     mydo_is_doing = 1
 58 
 59     for i:=0; i < 20; i += 1 {
 60         fmt.Printf("timer doing, %d\n", i)
 61         time.Sleep(1*time.Second)
 62     }
 63 
 64     mydo_is_doing = 0
 65 }
 66 
 67 func mydo() {
 68     fmt.Println("mydo timer triggered")
 69 
 70     if 0 != mydo_is_doing {
 71         fmt.Println("mydo timer is doing, ignore this")
 72         return
 73     }
 74 
 75     go mydo_thread()
 76 }
 77 
 78 func mydo_once() {
 79     fmt.Println("mydo_once timer triggered")
 80     for i:=0; i < 20; i += 1 {
 81         fmt.Printf("timer_oncccccccccccccccccccccce doing, %d\n", i)
 82         time.Sleep(1*time.Second)
 83     }
 84 }
 85 
 86 func main() {
 87     t:=Timer_interval(2000, 5000, mydo)
 88     t2:=Timer_once(3000, mydo_once)
 89     fmt.Println("####################1")
 90     time.Sleep(13*time.Second)
 91     fmt.Println("####################2")
 92     Timer_stop(t2)
 93     Timer_stop(t)
 94     fmt.Println("####################3")
 95     time.Sleep(50*time.Second)
 96     fmt.Println("####################4")
 97 
 98 
 99 }
100 
101 ///////////////////////////////////////////////////////  以上是测试用例

 

标签:delay,定时器,func,当中,interval,Timer,Golang,ms,time
From: https://www.cnblogs.com/LiuYanYGZ/p/18396021

相关文章

  • goleveldb的原理简述(基于golang的goleveldb库)
    简介goleveldb是基于LSM-Tree实现的针对处理写多读少场景的解决方案,通常用于构建写多读少的存储引擎整体架构图如下基于用户接口层简述原理吧Get,按key查询数据,首先区内存中的数据,如果内存中没有则依次从硬盘中的ldb文件中取得数据。Put,按key更新数据,首先写内存数据,如......
  • 25. shell当中的函数详解,管理函数,定义函数,交互式环境调用函数,查看删除函数,脚本中的函
    文章目录前言管理函数定义函数交互式环境调用函数查看函数删除函数脚本中的函数定义及使用函数使用函数文件环境函数示例总结友情链接前言函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独......
  • 12.Linux当中如何搜索文件,find详解,示范
    在Linux当中查找文件的命令但多,但个人觉得最重要的搜索文件的命令是find,这个命令使用非常频繁,需要熟练掌握文章目录前言find使用详解1.介绍2.语法详解3.find选项示例(option)4、可选项总结友情链接前言在Linux当中查找文件的命令但多,但个人觉得最重要的搜索文件的命令是find......
  • 26. shell当中函数返回值,返回值的作用,退出码状态,得到函数处理结果
    函数返回值作用在其他编程语言中,返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果可通过return语句返回。但Shell中返回值表示的是函数的退出状态:返回值0表示函数执行成功,非0表示函数执行失败。if、while、for等语句都是根据函数的退出状态来判断条件是否......
  • Golang 脱敏扩展包:简化敏感信息处理的利器
    Golang脱敏扩展包:简化敏感信息处理的利器原创 PFinal南丞 PFinalClub  2024年09月03日07:36 上海 听全文PFinalClub一个有信念者所开发出的力量,大于99个只有兴趣者。88篇原创内容公众号Golang脱敏扩展包:简化敏感信息处理的利器背景在数据处理......
  • imx6ull_GPT定时器
    一、定时器介绍原理图:时间计算:T=1/F=1/100HZ=0.01S二、I.MX6ullGPT定时器介绍简介:     GPT内部寄存器1.GPT定时器工作原理(1)选择时钟信号Theclockthatisinputtotheprescalercanbeselectedfrom4clocksources.Thefollowingtabl......
  • 七,Spring Boot 当中的 yaml 语法使用
    七,SpringBoot当中的yaml语法使用文章目录七,SpringBoot当中的yaml语法使用1.yaml的介绍2.yaml基本语法3.yaml数据类型4.学习测试的准备工作4.1yaml字面量4.2yaml数组4.3yaml对象5.yaml使用细节和注意事项6.总结:7.最后:1.yaml的介绍yaml......
  • AT32F403A通用定时器03
    上期:AT32F403A通用定时器02https://blog.csdn.net/weixin_64557865/article/details/140933118?spm=1001.2014.3001.5501目录一、输出部分1.PWM模式A2.PWM模式B3.强制输出模式4.输出比较模式5.单周期模式6.快速输出模式二、案例1.TMR联合DMA(1)功能(2)配置介绍步......
  • 使用Golang的协程竟然变慢了|100万个协程的归并排序耗时分析
    前言这篇文章将用三个版本的归并排序,为大家分析使用协程排序的时间开销(被排序的切片长度由128到1000w)本期demo地址:https://github.com/BaiZe1998/go-learning往期视频讲解......
  • 单片机中的定时器:精确时间的掌控者
    在单片机的世界里,定时器就像是一个精确的时间守护者,默默地为各种任务提供准确的时间基准。从简单的定时功能到复杂的实时控制系统,定时器都发挥着至关重要的作用。本文将深入探讨单片机中的定时器,包括其工作原理、应用场景以及编程实现等方面,旨在帮助读者更好地理解和应用这一重......