Ich benötige einen präzisen Zeitgeber, um eine Windows-Anwendung mit einem Laborgerät zu verbinden.
Ich habe System.Timers.Timer() verwendet, um einen Timer zu erstellen, der alle 10 ms tickt, aber diese Uhr läuft langsam. Zum Beispiel sollten 1000 Ticks mit einem Intervall von 10 msec 10 Wallclock-Sekunden dauern, aber es dauert tatsächlich eher 20 Wallclock-Sekunden (auf meinem PC). Ich vermute, das liegt daran, dass System.Timers.Timer() ein Intervall-Timer ist, der jedes Mal zurückgesetzt wird, wenn er abläuft. Da es immer einige Zeit dauert, bis der Timer abgelaufen ist und zurückgesetzt wird (auf weitere 10msec), läuft die Uhr langsam. Das ist wahrscheinlich in Ordnung, wenn das Intervall groß ist (Sekunden oder Minuten), aber inakzeptabel für sehr kurze Intervalle.
Gibt es unter Windows eine Funktion, die jedes Mal eine Prozedur auslöst, wenn die Systemuhr eine Grenze von 10 msec (oder was auch immer) überschreitet?
Dies ist eine einfache Konsolenanwendung.
Danke
Norm
UPDATE: System.Timers.Timer() ist bei kleinen Intervallen extrem ungenau.
Ich habe ein einfaches Programm geschrieben, das 10 Sekunden auf verschiedene Arten zählt:
Intervall=1, Anzahl=10000, Laufzeit = 160 sec, msec pro Intervall=16
Intervall=10, Anzahl=1000, Laufzeit = 16 sec, msec pro Intervall=15
Intervall=100, Anzahl=100, Laufzeit = 11 sec, msec pro Intervall=110
Intervall=1000, Anzahl=10, Laufzeit = 10 sec, msec pro Intervall=1000
Es scheint, dass System.Timers.Timer() nicht schneller als etwa 15 ms ticken kann, unabhängig von der der Intervalleinstellung.
Beachten Sie, dass keiner dieser Tests schien jede messbare CPU-Zeit zu verwenden, so dass die Grenze ist nicht die CPU, nur ein .net Einschränkung (Bug?)
Im Moment denke ich, dass ich mit einem ungenauen Timer leben kann, der alle 15 msec oder so eine Routine auslöst, und die Routine erhält eine genaue Systemzeit. Irgendwie seltsam, aber...
Ich habe auch ein Shareware-Produkt ZylTimer.NET gefunden, das behauptet, ein viel genauerer .net-Timer zu sein (Auflösung von 1-2 msec). Das könnte das sein, was ich brauche. Wenn es ein Produkt gibt, gibt es wahrscheinlich auch andere.
Nochmals vielen Dank.