我刚刚开始在几天前收拾Golang,我似乎无法想出时间.Sleep()......
我可以返回/中断for循环,但是函数不会返回,因为Sleep继续做它的事情。
我猜这个解决方案很简单,但我似乎无法找到答案。
func main() {
ticker := time.NewTicker(time.Second * 1)
go func() {
for i := range ticker.C {
fmt.Println("tick", i)
ticker.Stop()
break
}
}()
time.Sleep(time.Second * 10)
ticker.Stop()
fmt.Println("Hello, playground")
}
提前致谢!
答案 0 :(得分:6)
听起来你想向主要的goroutine发送一条消息告诉你你的其他goroutine已经完成了。为此,渠道是最好的方式。
func main() {
ticker := time.NewTicker(time.Second)
done := make(chan bool, 1)
go func() {
for i := range ticker.C {
fmt.Println("tick", i)
ticker.Stop()
break
}
done <- true
}()
timer := time.NewTimer(time.Second/2)
select {
case <-done:
timer.Stop()
case <-timer.C:
ticker.Stop()
}
fmt.Println("Done")
}
http://play.golang.org/p/5NFsvC5f7P
的工作示例当计时器大于自动收报机时,它会打勾。当它小于时,你看到的只是“完成”。
答案 1 :(得分:0)
这可能不是一个非常具体的解决方案,但您可以应用它。
我理解的方式是,你需要在特定条件下突破计时器。
尝试在你的睡眠周围放一个while循环,然后让它睡一秒
将条件设置为func上的bool
while (condition_to_sleep)
{
time.Sleep(1000);
}
这样你就可以在需要时打破计时器
希望这有帮助:)