Go语言 之time.Timer

package main

import (
    "fmt"
    "time"
)

func main() {
    //创建定时器,2秒后获取
    timer := time.NewTimer(time.Second * 2)
    //获取当前时间
    t1 := time.Now()
    //接收通道数据
    t2 := <-timer.C

    fmt.Println(t1)
    fmt.Println(t2)
    //结果为(相差两秒):
    /*
        2019-07-04 13:59:33.7200299 +0800 CST m=+0.022983601
        2019-07-04 13:59:35.7206204 +0800 CST m=+2.023574101
    */

    timer2 := time.NewTimer(time.Second * 10)
    //重置定时器
    timer2.Reset(time.Second * 3)
    //获取当前时间
    t3 := time.Now()
    fmt.Println(t3)
    t4 := <-timer2.C
    //停止定时器
    timer2.Stop()
    fmt.Println(t4)

    //定时执行一个函数
    timer3 := time.AfterFunc(time.Second*2, func() {
        fmt.Println("2秒函数执行了")
    })
    timer3.Reset(time.Second * 2)

    //延迟主协程的结束
    time.Sleep(time.Second * 3)
}

相关函数列表:

NewTimer()创建一个Timer,它会在最少过去时间段d后到期,向其自身的C字段发送当时的时间
AfterFunc()另起一个go程等待时间段d过去,然后调用f。它返回一个Timer,可以通过调用其Stop方法来取消等待和对f的调用。
Reset()使t重新开始计时,(本方法返回后再)等待时间段d过去后到期。如果调用时t还在等待中会返回真;如果t已经到期或者被停止了会返回假。
Stop()停止Timer的执行。如果停止了t会返回真;如果t已经被停止或者过期了会返回假。Stop不会关闭通道t.C,以避免从该通道的读取不正确的成功。
posted @ 2019-07-04 15:05  样子2018  阅读(2354)  评论(0编辑  收藏  举报