Golang 定时器

Jackey Golang 1,391 次浏览 , 没有评论

time.Timer

Timer 是一个定时器。代表未来的一个单一事件,你可以告诉timer你要等待多长时间。

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

它提供一个channel,在定时时间到达之前,没有数据写入timer.C 会一直阻塞。直到定时时间到,系统会自动向 timer.C 这个channel 中写入当前事件,阻塞即被解除。

代码示例:

func main() {
    fmt.Println("当前时间:", time.Now())
    // 创建定时器
    myTimer := time.NewTimer(time.Second * 2)
    nowTime := <-myTimer.C
    fmt.Println("现下时间:", nowTime)
}

3种定时方法

// 3种定时方法
func main() {
    fmt.Println("当前时间:", time.Now())

    // 1. sleep
    time.Sleep(time.Second * 1)

    // 2 Timer.C
    myTimer := time.NewTimer(time.Second * 2)
    nowTime := <-myTimer.C
    fmt.Println("现下时间:", nowTime)

    // 3. time.After
    nowTime = <-time.After(time.Second * 2)
    fmt.Println("现下时间:", nowTime)
}

定时器的重置与停止

func main() {
    // 创建定时器
    myTimer := time.NewTimer(time.Second * 10)
    // 重置定时时长为1
    myTimer.Reset(1 * time.Second)
    go func() {
        <-myTimer.C
        fmt.Println("子go程定时完毕")
    }()

    // 设置定时器终止
    //myTimer.Stop()

    for {
        ;
    }
}

定时器周期定时

func main() {
    fmt.Println("now:", time.Now())
    myTicker := time.NewTicker(time.Second)
    go func() {
        for {
            nowTime := <-myTicker.C
            fmt.Println("nowTime:", nowTime)
        }
    }()
    for {

    }
}

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Go