Optimale zeitliche Ereigniskontrolle

Wie kann ich mit C am professionellsten eine Funktion erstellen, die zu bestimmten durch Variablen bestimmten Zeitpunkten oder zeitintervallen ein Ereignis auslöst.

Wichtig ist hier, daß während Wartezeiten andere Programme nicht angehalten werden wie durch Sleep und daß möglichst auf umständliche häufige timerereignisverarbeitungen verzichtet werden kann.

Viele Grüße
Gerald

Hi Gerald,

was verstehst Du unter umständlich häufigen Timerereignisverarbeitungen? Der Hardware-Interrupt 08h wird in deinem Rechner ohnehin 18,2 mal pro Sekunde aufgerufen. Dabei wird bei jedem Aufruf ein Zähler inkrementiert. Wenn Du diesen Interrupt auf einen eigenen Handler umlegst und abfragst, ob eine bestimmte Anzahl von Aufrufen erreicht ist, so kostet Dich dieses ca. (ein cmp, ein bne) 18,2 * 2 = 36 Systemtakte pro Sekunde. Bei 500 MHz sind dies echte Peanuts. Wenn die gewünschte Anzahl an Sekunden erreicht ist, so erfolgt ein Aufruf einer entsprechenden C-Prozedur.

So etwas zu programmieren ist nicht ganz einfach, jedoch auch nicht unmöglich. Ein sehr gutes Buch zu diesem Thema ist:

Tischer, Michael:
PC Intern, with CD- ROM, 6th ed.
ABACUS SOFTWARE, 0796
Amerikanische Ausgabe
ISBN: 1-55755-304-1 Buch anschauen
$ 69.95
US Ladenpreis
Unverbindliche Preisempfehlung
inkl. MwSt.: DM 143.00

Leider gibt es seit der 6ten Auflage nur noch die US-Version. In einer verstaubten Ecke einer (Uni-)Bibliothek findest Du aber sicherlich noch eine ältere Auflage in Deutsch. Auf der Beiliegenden Diskette (ab Auflage 4 CD) findest Du auch ein Beispielprogramm.

Gruß
Ted

Danke für die ausführliche Erklärung und Anleitung zum Thema Timer.

Ich habe hiermit schon etwas gearbeitet und weiß daher auch, wie ein Timer eingesetzt werden kann.

Dennoch frage ich mich, warum es nicht möglich sein sollte, ähnlich einer Sleep-Anweisung die Fortsetzung eines Programmes für eine bestimmte Zeit anzuhalten und dabei auch den Prozessor für andere Tasks freizugeben. Ansonsten muß ich den gesamten programmablauf einer aufwendigen Erfassung von Videobildern über eine mci-Schnittstelle in eine separate Timer-Prozedur reinstopfen und die einzelnen Schritte in Abhängigkeit von irgendwelchen Zählerzustanden ausführen lassen.

Gruß Gerald