【发布时间】:2016-08-09 22:37:35
【问题描述】:
我想动态更改我的代码间隔。
我写了一个例子来告诉你我是怎么做的。我的用例不是“加速度计”,但我希望它能给你一个想法。
http://play.golang.org/p/6ANFnoE6pA
package main
import (
"time"
"log"
"fmt"
)
func main() {
interval := float64(1000)
ticker := time.NewTicker(time.Duration(interval) * time.Millisecond)
go func(){
counter := 1.0
for range ticker.C {
log.Println("ticker accelerating to " + fmt.Sprint(interval/counter) + " ms")
ticker = time.NewTicker(time.Duration(interval/counter) * time.Millisecond)
counter++
}
log.Println("stopped")
}()
time.Sleep(5 * time.Second)
log.Println("stopping ticker")
ticker.Stop()
}
问题在于,自动收报机总是每秒钟“滴答”一次,并且不会加速……知道吗?
【问题讨论】:
-
代码存在数据竞争
-
因为 for 循环仍在使用旧股票代码对象的通道,而不是新股票对象的通道。
-
感谢您的反馈。 @BleedingFingers 我看到了数据竞争(在股票代码上),但在这种情况下不应该恐慌吗?否则指针应该用新的替换。 @NipunTalukdar 我也有同样的想法,如果这是正确的 - 那么意味着股票指针在范围循环中被“缓存”并且无法覆盖。我会用另一个例子来试试这个。
-
是的,@NipunTalukdar,我猜
range方法缓存了要循环的变量,然后我认为像我建议的那样覆盖股票行情是不可能的(使用range)-@ 987654322@