Uživatelské nástroje

Nástroje pro tento web


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)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki