Beschreibung | Das System bietet jedem Prozess drei Intervall-Timer an, die in der Datei sys/time.h vereinbart werden. Der Aufruf getitimer() speichert den aktuellen Wert des Timers which in der Struktur, auf die value zeigt. Der Aufruf setitimer() setzt den Wert von which auf den Wert, der in der Struktur steht, auf die value zeigt; ist ovalue ungleich NULL , wird der vorherige Wert des Timers in der Struktur abgelegt, auf die ovalue zeigt. Die Einstellung eines Timers wird durch die Struktur itimerval (siehe sys/time.h ) definiert, welche mindestens die folgenden Komponenten enthält: struct timeval it_interval; /* Uhrintervall */
struct timeval it_value; /* aktueller Wert*/
Wenn it_value ungleich null ist, wird die Zeit bis zum nächsten Ablauf des Timers angegeben. Wenn it_interval ungleich null ist, wird ein Wert angegeben, auf den it_value gesetzt wird, wenn der Timer abläuft. Wird it_value auf null gesetzt, so wird der Timer deaktiviert, unabhängig vom Wert von it_interval . Das Setzen von it_interval auf null deaktiviert den Timer nach seinem nächsten Ablauf (vorausgesetzt, dass it_value ungleich null ist). Sind Zeitwerte kleiner als die Auflösung der Systemuhr, so werden diese auf die Auflösung der Systemuhr gerundet. Jedem Prozess stehen drei Timer zur Verfügung, die über die folgenden Werte für which angesprochen werden: ITIMER_REAL
| dekrementiert in Echtzeit. Das Signal SIGALRM wird gesendet, wenn dieser Timer abläuft. | ITIMER_VIRTUAL
| dekrementiert in der virtuellen Prozesszeit. Dieser Timer läuft nur, wenn der Prozess ausgeführt wird. Das Signal SIGVTALRM wird gesendet, wenn dieser Timer abläuft. | ITIMER_PROF
| dekrementiert in virtuelle Prozesszeit, unabhängig von ITIMER_ VIRTUAL . Jedes Mal, wenn der Timer ITIMER_PROF abläuft, wird das Signal SIGPROF gesendet. Da dieses Signal Systemaufrufe des Prozesses unterbricht, müssen diejenigen Programme, die diesen Timer verwenden, darauf vorbereitet sein, die unterbrochenen Systemaufrufe zu wiederholen. |
setitimer() und sleep() oder usleep() sollten nicht zusammen benutzt werden, da es zu unerwünschten Wechselwirkungen kommen kann, insbesondere meldet ein Aufruf von sleep() eine eigene Signalbehandlungsroutine an, so dass die Signalbehandlungsroutine des Anwenders nicht aktiviert wird.
|