开发者

Go语言实现定时器的方法详解

目录
  • Timer
  • Tiker

本文主要介绍了Go语言实现定时器的两个方法,包括一次性定时器(Timer)和周期性定时器(Ticker),一次性定时器:newTimer()创建一个能够往当前通道在持续duration时间之后发送当前时间的Timer。

Timer

Timer是一种单一事件的定时器,即经过指定的时间后触发一个事件,因为Timer只执行一次就结束,所以称为单一事件,这个事件通过其本身提供的channel进行通知触发。

使用示例

package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    //1. timer基本使用
    timer1 := time.NewTimer(4 * time.Second)
    t1 := time.Now()
    fmt.Printf("t1:%v\n", t1)
    t2 := <-timer1.C
    fmt.Printf("t2:%v\n", t2)
    fmt.Println("2s到了")
 
    //2. timer只能响应1次, 到截止时间会将时间发给通道
    //timer2 := time.NewTimer(time.Second)
    //for {
    //    <-timer2.C
    //    fmt.Println("时间到", t2php)
    //}
 
    // 3.timer实现延时的功能
    time.Sleep(time.Second)
    fmt.Println(time.Now())
    timer3 := time.NewTimer(2 * time.Second)
    <-timer3.C
    fmt.Println("2秒到了")
    fmt.Println(time.Now())
    <-time.After(2 * time.Second)
    fmt.Println("2秒到了")
 
    // 4.停止定时器
    timer4 := time.NewTimer(4 * time.Second)
    b := timer4.Stop()
    if b {
      js  fmt.Println("timephpr4关闭")
    }
 
    // 5.重置定时器
    timer5 := time.NewTimer(5 * time.Second)
    timer5.Reset(3 * time.Second)
    fmt.Println(time.Now())
    fmt.Println(<-timer5.C)
    time.Sleep(time.Second * 30)
}

Tiker

Tiker是一个定时触发的计时器,它会以一个间隔(interval)往通道发送当前时间,而通道的接收者可以以固定的时间间隔从通道中读取时间:

package main
 
import (
    "fmt"
    "time"
)
 
func main() {
    // 1.获取ticker对象
    开发者_JAVA入门ticker := time.NewTicker(2 * time.Second)
svGUbyOF    i := 0
    // 子协程
    go func() {
        for {
            i++
            fmt.Println(<-ticker.C)
            if i == 4 {
                //停止ticker
                ticker.Stop()
            }
        }
    }()
    time.Sleep(time.Second * 20)
}

到此这篇关于jsGo语言实现定时器的方法详解的文章就介绍到这了,更多相关Go语言定时器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜