【问题标题】:Unable to stop the timer ticker无法停止计时器
【发布时间】:2018-06-25 10:41:02
【问题描述】:

我定义了几个代码,当我试图阻止它们时,我看到了下面

未定义:ticker.Stop 中的代码

未定义:Q30sticker.Stop 中的 Q30sticker

代码示例:

if activenode() {
                    cipaflage = true
                    break

                } else {
                    if cipaflage == true {
                        defer ticker.Stop()
                        defer Q30sticker.Stop()
                        cipaflage = false
                        }
                    continue
                }

并且我已将代码声明如下

ticker := time.NewTicker(59 * time.Second)
Q30sticker := time.NewTicker(time.Second * 30).C

【问题讨论】:

标签: go timer goroutine


【解决方案1】:

根据文档here

Ticker 有一个导出字段 C。

type Ticker struct {
        C <-chan Time // The channel on which the ticks are delivered.
        // contains filtered or unexported fields
}

您可以在C 频道上接收“滴答声”或心跳,但如果您这样做:

Q30sticker := time.NewTicker(time.Second * 30).C

然后Q30sticker 持有对频道C 的引用,而不是股票代码类型。定义 Stop 方法的是 time.Ticker 结构体。

更新您的变量以保存代码类型(通过删除 .C):

Q30sticker := time.NewTicker(time.Second * 30)

在您从频道接收的地方,使用. 点语法访问频道。

<-Q30sticker.C

【讨论】:

  • 虽然这是发布代码的一个问题,但这不是问题中所述问题的原因。
  • 我不同意,undefined: Q30sticker in Q30sticker.Stop 是一个编译时错误,因为&lt;-chan Time 没有定义Stop 方法。
  • 能否详细解释一下。
  • 如果答案中的任何内容没有意义,这就是我在上面试图解释的内容;我可以澄清一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
相关资源
最近更新 更多