signaly
Toto je starší verze dokumentu!
Signály
špeky
- sleep() vs alarm() není dobré používat současně, protože se ovlivňují
- alarm nastavuje časovač pro zaslání signálu SIGALRM
- sleep také nastavuje časovač pro zaslání signálu. Přesněji:
- uloží si původní handler SIGALRM a zbývající čas
- nastaví handler a časovač pro sebe, po uplynutí pokračuje
- vrátí zbývající čas a handler SIGALRM na puvodní
- pokud se nastaví alarm a nějaký handler, zavolání sleep tento alarm pozastaví.
- Příklad:
static int timeout;
static void IntHandler(int signal) {
switch (signal) {
case SIGALRM:
timeout = 1;
break;
default:
// ignore everything we don't know
break;
}
} /* End of IntHandler */
main() {
timeout=0;
alarm(10);
while(!timeout) {
sleep(1);
}
printf("finished\n");
}
- uvedeny kod ma nastaven alarm na 10s. Obsahuje cyklus, ktery se provadi, dokud neni nastavena hodnota timeout. V každé iteraci se čeká 1s. Cyklus poběží mnohem déle, než by se na první pohled zdálo. Během volání sleep je totiž čítač alarmu pozastaven.
signaly.1391094323.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)
