美文网首页golang
go 中的定时器相关

go 中的定时器相关

作者: wayyyy | 来源:发表于2022-08-20 01:30 被阅读0次
time.After
func main() {
    tChannel := time.After(3 * time.Second)
    select {
    case <-tChannel:
        fmt.Println("3s arrived")
    }
}
image.png

或者可以直接使用 time.AfterFunc 设置回调函数

func main() {
    time.AfterFunc(3 * time.Second, func(){
        fmt.Println("3s arrived")
    })

    time.Sleep(5 * time.Second) //等待协程退出
}
time.Timer
func NewTimer(d Duration) *Timer

func (t *Timer) Stop() bool
    Timer 创建后可随时停止,true : 定时器未超时,后续不会再有事件发送;false : 定时器超时后停止

func (t *Timer) Reset(d Duration) bool
    已经过期的定时器或已经停止的定时器,可以通过重置来重新激活,重置的动作实质上是先停掉定时器,再启动。其返回值也即停掉计时器的返回值。
func main() {
    timer := time.NewTimer(5 * time.Second)

    select {
    case <- timer.C:
        fmt.Println("3s arrived")
    }
}
image.png
time.Ticker
func NewTicker(d Durtion) *Ticker
func (t *Ticker) Stop()

time.Ticker以周期性地触发时间事件,每次到达指定的时间间隔后都会触发事件。

func main() {
    ticker := time.NewTicker(1 * time.Second)
    defer ticker.Stop() // 需要关闭

    for range ticker.C {
        fmt.Println(time.Now().Unix(), "ticker...")
    }
}
image.png
time.Tick
func Tick(d Durtion) <-chan Time

这个函数内部实际还是创建一个 Ticker,但是它并不会返回出来,所以没有手段来停止该 Ticker;同时 time.Tick 创建的 Ticker 在运行时不会被 gc 回收,能不用就不用。下面的错误示例:

func WorngTicker() {
    for {
        select {
        case <- time.Tick(1 * time.Second)    // 每次都会创建。
            fmt.Println("资源泄露")
         }
    }
}

相关文章

  • GO的定时器Timer 和定时任务cron

    GO的定时器Timer 和定时任务cron 上次我们说到了GO 中 swaggo 的应用,咱们来回顾一下 swag...

  • go 中的定时器使用

    time.After 或者可以直接使用 time.AfterFunc 设置回调函数 time.Timer time...

  • 第06天(并发编程)_02

    15_Timer的使用.go 16_通过Timer实现延时功能.go 17_停止和重置定时器.go 18_Tick...

  • golang timer - note

    Go提供了两种定时器,此处分为一次性定时器、周期性定时器。 一次性定时器:定时器只计时一次,结束便停止; 周期性定...

  • go 中的时间相关处理

    时区 GMT(Greenwich Mean Time),格林威治平时。GMT 根据地球的自转和公转来计算时间,它规...

  • iOS定时器看我就够了

    这篇文章总结iOS开发中用到的全部和定时器相关的内容,用到某个定时器就会总结一下,所以持续更新中~ CADispl...

  • dpvs学习笔记: 6 定时器实现及连接老化超时

    定时器实现方式很多种,定时器个数也不同。比如 go 老版本只有一个全局定时器,所以有些高性能项目抛弃了,自己实现用...

  • 对于日志等数据库分表处理

    步骤: 1、在web.xml中添加监听器2、监听器中定义定时器与定时任务3、接下来就是在定时器中完成相关操作 具体...

  • RunLoop

    1、 Runloop 2、RunLoop与线程 3、RunLoop相关类 4、GCD中的定时器 5、CFRunLo...

  • Go 的定时器

    这个东西其实早就应该总结一下了,然而一直懒=_=,顺便事情很多,就一直没有总结。为什么需要做一个定时器呢,假设我们...

网友评论

    本文标题:go 中的定时器相关

    本文链接:https://www.haomeiwen.com/subject/hatcgrtx.html