duandi8838 2018-04-23 04:18
浏览 25

time.Timer的行为

I'm new to Go and the time package is a tad confusing for me. So I'm making a chat box and the idea is that when you send a message, the timer resets to 20 seconds, and if you don't respond by 20 seconds you get kicked out. The code I have works only if the person has typed something, but if they never input anything, they don't get kicked out. I tried applying Stop() before the for loop, but it doesn't work. Should I do all the timer before and after the loop rather than inside the for loop?

func ... {

  timer := time.NewTimer(20 * time.Second)

  for input.Scan() {
  go func(){
    <-timer.C
    leaving <- ch
    conn.Close()
  }()

  messages <- input.Text()
  timer.Stop()
  timer.Reset(20 * time.Second)
}
  • 写回答

1条回答 默认 最新

  • dongli8862 2018-04-23 05:33
    关注

    You can use time.AfterFunc; for example;

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        timer := time.AfterFunc(time.Second*60, func() {
            fmt.Printf("you're out!")
        })
        defer timer.Stop()
    }
    

    'cause whether user types something or not you can close the connection and send to leaving channel.

    评论

报告相同问题?

悬赏问题

  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch