Yarım milisaniye hassasiyetle doğru sırayla çalıştırmak gerekir görevleri planlamak için Go time.Timer
s kullanmaya çalışıyorum üzerinde Git (milisaniye hassasiyet). Bu OSX ve Linux üzerinde mükemmel çalışıyor, ancak Windows'ta her zaman başarısız oluyor.Yüksek çözünürlüklü zamanlayıcılar, Windows
Aşağıdaki kod sorunu göstermektedir. 5 zamanlayıcıyı, ilkini 1 ms'ye, ikincisini 2 ms'ye ... ve sonuncuyu 5 ms'ye ayarlar. Bir zamanlayıcı patladığında, numarası yazdırılır. OSX ve Linux'ta bu, çıktı olarak "12345" üretti, ancak Windows'da sayılar az ya da çok rasgele (Win 7 ve Windows Server 2012'de test edildi).
package main
import (
"fmt"
"time"
)
func main() {
var timer1, timer2, timer3, timer4, timer5 *time.Timer
timer1 = time.NewTimer(1 * time.Millisecond)
timer2 = time.NewTimer(2 * time.Millisecond)
timer3 = time.NewTimer(3 * time.Millisecond)
timer4 = time.NewTimer(4 * time.Millisecond)
timer5 = time.NewTimer(5 * time.Millisecond)
// should print 12345
for {
select {
case <-timer1.C:
fmt.Print("1")
case <-timer2.C:
fmt.Print("2")
case <-timer3.C:
fmt.Print("3")
case <-timer4.C:
fmt.Print("4")
case <-timer5.C:
fmt.Print("5")
case <-time.After(200 * time.Millisecond):
return // exit the program
}
}
}
Ben de daha kısa aralıklarla meydana gelmiş olmalıdır rağmen bu davranış Windows zamanlayıcı hassas 16 ms 1 ms indirildiği Go 1.6 (https://golang.org/doc/go1.6#runtime, 4 paragraf), yapılan değişiklikler nedeniyle olduğunu düşünüyorum Daha önce (100 orders).
1 ms geri küresel, Windows zamanlayıcı hassasiyet sıfırlamak için, ya da iş Yukarıdaki örneği yapacak bir yüksek çözünürlüklü zamanlayıcı erişmek için herhangi bir yolu var mı?
Geçerli davranış go1.7rc nedir? Windows zamanlayıcıları performanslarından dolayı daha fazla değişiklik oldu. GH'deki birçok zamanlayıcı ile ilgili konuları okumak isteyebilirsiniz. – JimB
Zamanlayıcılar, Go 1.7'nin mevcut beta sürümü ile daha yüksek bir çözünürlüğe sahip gibi görünüyor. Yardım ettiğin için teşekkür ederim. – m4r73n
Muhtemelen bunu bir cevap olarak eklemeniz ve ondan memnun olmanız halinde kabul edildi olarak işaretlemeniz iyi bir fikirdir. Sonra cevapsız soruları cevaplamak isteyen insanlar bunu atlayabilir. – ijt