zoukankan      html  css  js  c++  java
  • go 的 time ticker 设置定时器

    上示例

    package main
    
    import (
        //    "bytes"
        //    "encoding/json"
        "fmt"
        //    "os"
        //    "gopkg.in/mgo.v2"
        //    "gopkg.in/mgo.v2/bson"
        //    "io/ioutil"
        //    "net/http"
        //    "strings"
        //    "net/url"
        "time"
    )
    
    func main() {
        ticker := time.NewTicker(10 * time.Second)
        for i := 0; i < 10; i++ {
            time := <-ticker.C
            fmt.Println(time.String())
        }
    }

    执行结果

    wifimac:webdemo cdpmac$  go run src/server/timetest.go 

    2015-08-24 16:22:23.590564088 +0800 CST

    2015-08-24 16:22:33.591194618 +0800 CST

    2015-08-24 16:22:43.587720967 +0800 CST

    2015-08-24 16:22:53.590231413 +0800 CST

    2015-08-24 16:23:03.591164202 +0800 CST

    ....

    懂的已经不用往下看了。

     

    找不到现成的资料。

    看官方包的示例test代码

    看go的time部分源码 Ticker结构 

    type Ticker struct {
    
    C <-chan Time // The channel on which the ticks are delivered.
    
    r runtimeTimer
    
    }

    Time也类似

    有一个只读的chanel


    go的time和ticket的调用

    或者叫timmer internal和其他语言的开发思路不一样。

    其他语言,多是注册回调函数,定时,时间到了调用回调。

    go是 通过 chan

    的阻塞实现的。

    调用的地方,读取chan 

    定时,时间到,向chan写入值,阻塞解除,调用函数。 

  • 相关阅读:
    Jump Game II
    Trapping Rain Water
    First Missing Positive
    Median of Two Sorted Arrays
    noip2012开车旅行 题解
    AC自动机专题总结
    初探数位DP
    斯坦纳树 [bzoj2595][wc2008]游览计划 题解
    [bzoj3244][noi2013]树的计数 题解
    网络流模型小结
  • 原文地址:https://www.cnblogs.com/zihunqingxin/p/4755168.html
Copyright © 2011-2022 走看看