Hallo!
Ich bezeichne mich als fortgeschrittenen Anfänger inC# und habe jetzt eine Frage zum Einsatz von Timern.
Ich schreibe ein Programm, das als Datenrekorder für ein anderes Programm dient und diese Daten sowohl in ein Logfile schreibt als auch an meinen Server überträgt.
Zusätzlich reagiert der Rekorder auf gewisse Aktionen des Users im anderen Programm und verhindert ggf. diese Aktionen. Im anderen Programm kann ich das nicht abfangen, da ich auf dieses keinen Codezugriff habe.
Grob gibt es drei unterschiedliche Aktionsbereiche, die regelmäßig gemacht werden müssen:
1) Checks
Diese müssen in sehr knappen Abständen (ca. 10ms) erfolgen, da sie kritisch sind. Geht ein Check schief, wird zum Einen die zugrunde liegende Aktion revidiert und zum Anderen in meinem Programm eine entsprechende Meldung ausgegeben.
2) Datenlogging
Alle 1000ms werden Daten analysiert und ggf. gespeichert. Ebenso werden sie möglicherweise in das Logfile geschrieben und an meinen Server geschickt. Ein paar Daten werden auch in der GUI angezeigt und müssen ggf. upgedated werden.
3) GUI-Updates
Hier wird z.B. jede Minute von einem Zeitserver die aktuelle Zeit angezeigt, die Verbindung zu meinem Server überprüft und entsprechend visualisiert sowie die Verbindung zum anderen Programm überprüft.
Ich sehe zwei Ansätze, wie ich meine Timer aufbauen könnte:
einen Timer alle 10ms
Der macht alle Arbeiten, wobei anhand eines Zähler entschieden wird, welche Aktionen erfolgen soll (also z.B. (Zähler % 1000 == 0) => Lese Daten)
mehrer Timer
Ich mache insgesamt 4 Timer:
a) Check-Timer
b) Datenanalyse-Timer
c) Logfile- und Server-Timer
d) GUI-Timer
Die Frage ist, welche Vorgehensweise sinnvoller ist, wenn unbedingtes Ziel ist, daß der Check-Timer möglichst genau immer alle 10ms läuft.
Ich schwanke auch darin, welche Timertypen ich verwenden soll, da habe ich soviele Informationen gefunden, daß ich da eher unsicherer als sicherer werde 😉
Könnt ihr mir da ev. ein bisschen unter die Arme greifen?
Danke & beste Grüße
Michael
10ms
Dafür ist wohl ein multimedia-timer am besten, die anderen habe iene Auflösung von ca. 15ms
Ich habe mich an diesen Beitrag Welchen Timer den nun? erinnert, wo es um eine ähnliche Fragestellung ging.
Neben dem Multimedia-Timer gäbe es auch noch die Möglichkeit mittels QueryPerformaceCounter eine genaue Abfrage im (Unter-)Millisekundenbereich zu machen.