Windows Timer, genauigkeit weit gefehlt



  • Hallo miteinander

    Ich habe eine Frage betreffend "einigermassen" genauen Zeitbasen in Windows:
    Wie kann ich so etwas erreichen?
    Das Problem, welches mich zu dieser Frage geführt hat, ist folgendes:
    Ein Timer (Interval 1ms) soll ein Stream-Kommunikation über USB kontrollieren und steuern. Ein 2. Timer sollte mir eine Verzögerung für eine Anzeige am Bildschirm generieren (ebenfalls 1ms Intervall).

    Wenn ich jetzt die Zeitverzögerung auf ca 2 Sekunden einstelle so generiert mir Windows eine Verzögerung von je nach dem > 3 Sekunden. Zum Teil eher gegen 5 Sekunden. Wenn jetzt die Stream-Kommunikation noch nebenan etwas am verarbeiten ist (leider über For-Schlaufen) so wir aus 2 Sekunden sehr schnell 50 Sekunden.

    Der Timer mit der Stream-Funktion wird zwar alle 1ms aufgerufen, hat aber effektiv nur alle ~1500ms etwas zu tun. Und weiter sind die Abläufe in der Timer-Funktion nicht sooo Zeitintensiv, also wenn er mit Kommunikation etwa 500ms daneben ist, würde das schon reichen.

    Ich programmiere normalerweise Mikrocontroller und bin es gewohnt, dass ich dort ALLES genau so machen kann, wie ich es will, und nicht plus minus Luftdruckabhängig oder wie viel gerade auf der Festplatte ist, oder ob irgendwie eine Fliege auf dem Bildschirm herumtantz...
    Wenn ich auf einem MCU mit 1/30 der PC Prozessorfrequenz eine Quarz-genaue Zeitbasis von 1us oder weniger (kommt auf die Programmierung an) erreichen kann, muss doch ein Intervall von 1ms auf dem PC möglich sein, oder nicht?

    Besten Dank für die Nachhilfe
    MFG
    P51D



  • Windows ist kein Echtzeit-OS. Deshalb sind solche Dinge _garantiert_ nicht möglich.
    Für eine Genauigkeit um ca. 2 ms musst Du DIch mit Multimedia-Timern beschäftigen. Genauer gesagt mit "timeBeginPeriod"...



  • Nur zur Info: ein Windows-Timer hat nur eine durchschnittliche Reaktionszeit von 14-15ms, also sind kleinere Werte nicht möglich.



  • Doch.. .man kann auf bis zu 2 ms gehen... siehe "timeBeginTimer"...



  • Sorry Jochen, meine Antwort sollte dem Threadersteller als Erklärung gelten, warum er mit einem Standard WinForms-Timer keine höhere Genauigkeit hinbekommen hat.
    Daß deine Antwort mittels des Multimedia-Timers richtig ist, habe ich nicht bezweifelt (ich habe schon in der Spieleentwicklung gearbeitet und kenne den daher ganz genau).



  • Besten Dank für eure Antworten.

    Jetzt haben sich bei mir, als ich ein wenig nach besagtem Multimedia-Timer gesucht habe, folgede Fragen heraus kristalisiert:

    1. Kann ich mit einem Multimedia-Timer auch so etwas wie ein Event erzeugen (ähnlich wie Timer-Tick Funktion)?
    2. Bis jetzt habe ich immer nur ein einziger Timer in Beispielprogrammen gesehen. Kann ich auch mehrere Timer erstellen, respektive abfragen?
    3. Wie genau sind dann die Timer-Events (falls vorhanden) in Bezug auf grosse Verarbeitungsprozesse? Wenn er irgendwo in einer Schlaufe etwas am abarbeiten ist, generiert der Timer ein Interrupt?

    Nochmals besten Dank für die Hilfe
    MFG
    P51D



  • Wenn es etwas kosten darf, geht es auch viel genauer als mit einem Multimedia Timer.

    z.B. damit
    http://www.kithara.de/de/presse/items/kithara-timer-toolkit.html



  • Ok, Ich habe mich jetzt nach den Ferien etwas mehr mit dem Timer beschöftigt:
    timeBeginPeriod, timeGetTime und timeEndPeriod laufen soweit so gut. Jetzt möchte ich aber gerne einen eigenen Event des Timers erstellen über timeSetEvent.
    Doch leider habe ich hier keine Ahnung, wie ich schlussendlich zu einer Funktion wie "tick" komme.

    Kann mir da jemand weiterhelfen?

    MFG
    P51D


Anmelden zum Antworten