Michael Schröpl: timer im Hintergrund

Beitrag lesen

Hi romy,

bekomme die nächste Aufgabe

woher? Ist das eine Programmausgabe?

Zeit ist Abgelaufen
Ich bekomme ein Ergebnis

Hm. Du wartest also simultan auf zwei Ereignisse - einen Tastatur-Event und einen Timer-Event.
Da wirst Du davon abhängig sein, wie Dein Betriebssystem die entsprechenden Events verarbeitet.

Womit liest Du von der Tastatur? Ist das ein "keypress"-Aufruf (wie ich ihn aus Borland-Pascal in Erinnerung habe), also einer, der auch schon ohne vorliegende Eingabe zurückkehrt?
Wenn ja, dann könntest Du einfach die Tastatur und die Uhrzeit abwechselnd abfragen. Dann würdest Du ein "busy wait" verwenden - aber vielleicht kannst Du Dir das leisten, weil der Rechner nicht gleichzeitig noch etwas Drittes tun soll.

Wenn Du statt dessen ein normales "read" von der Tastatur verwendest, dann wird Dir das die Steuerung nicht freiwillig zurück geben. Selbiges kannst Du aber ggf. erzwingen, wenn Du beim Betriebssystem einen Timer Interrupt anmeldest. Wie das genaut geht, hängt von Deinem OS und von Deiner Programmiersprache ab. Du könntest versuchen, Deinem Prozeß, der auf die Tastatur wartet, periodisch Signale zu senden, welche dieses Warten unterbrechen und dem Prozeß die Chance geben, "auf die Uhr zu sehen". Beispielsweise durch einen zweiten Prozeß, der in einer Endlosschleife abwechselnd ein "sleep 1" und ein "kill -HUP $PID1" macht (jetzt mal "UNIX style" formuliert), während der erste Prozeß zuerst eine Unterbrechungsbehandlungsroutine beim Betriebssystem (oder dem Laufzeitsystem der Sprache) anmeldet, dann permanent auf die Tastatur wartet (und im Falle einer Eingabe die nächste Aufgabe ausgibt), während seine Unterbrechungsbehandlungsroutine einfach nur auf die Uhr schaut und das Programm beendet, falls die Zeit abgelaufen ist, und ansonsten nichts tut.

Der "Algorithmus" hängt letzten Endes sehr stark davon ab, welche Basis-Befehle Du zur Verfügung hast.
Um auf mehr als ein Ereignis gleichzeitig warten zu können, hast Du verschiedene Möglichkeiten:
a) alle Ereignisse permanent zyklisch pollen,
b) alle Ereignisse per Signal melden lassen,
c) eine Misch-Strategie aus a) und b), wie oben beschrieben.

Viele Grüße
      Michael

--
T'Pol: I apologize if I acted inappropriately.
V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.