Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Delay Probleme auf 1 GHz Rechner

  Alt 6. Dez 2003, 10:38
Hm, ich weiß nicht so recht. Obige Methode mag unter Realmode OS wie DOS noch funktionieren, aber unter PM Systemen eben nicht mehr. Zudem ist 1 Millisekunde auf heutigen Rechnern enorm viel Zeit. Zb. eine 2GHz CPU erledigt in 1 Millisekunde ca. 2.091.008 Instruktionen, das ist schon fast ein komplettes Program !! Deine Methode würde ja in einem Realtime Thread/Process laufen, und somit enorm viel Rechenzeit verschwenden.

Viel besser ist es dann anders vorzugehen. Man nimmt einen Realtime Thread/Process, ließt per QueryPerformanceCounter() den High Resolution Timer aus. Dieser hat eine Auflösung von QueryPerformanceFrequency() = min. 1,7 MHz. D.h. man kommt unter 1ms Auflösung. Nun wird der letzte Zeitpunkt in dem der Thread aufgerufen wurde zwischengespeichert. Beim erneuten Aufruf wird überprüft ob 1 ms vergangen ist. Falls ja führt der Thead seine Aktion aus und speichert den nächsten Zeitwert zwischen.

Denoch wird man niemals unter PM Systemen auf Anwendungsebene einen exakten Timer hinbekommen. Dies geht nur auf Treiberebene unter Verwendung von Interrupt gesteuerten Zeitgebern. Auch dann ist es noch fraglich ob die abzuarbeitene Routine tatsächlich zeitsynchron laufen kann. Denn diese Routine ist dann immer noch dem Tasksheduller vom OS abhängig. Es spielt hier keine Rolle ob man Windows oder Linux oder Unix betrachtet. KEINES dieser Betriebssysteme ist technisch gesehen in der Lage echte Echtzeit zu ermöglichen. Auch wenn man von Linux/Unix desöfteren anderes hören mag, es gibt keine Echtzeit Betriebsysteme, denn Echtzeit würde bedeuten das der Rechner unendlich schnell getaktet sein müsste, eben in Echtzeit. Selbst der Mensch denkt nur im Millisekunden Bereich schnell.

Gruß Hagen
  Mit Zitat antworten Zitat