/* * Program demonstrira ponasanje Windows sustava pri pojavi signala * * Ukratko, "windowsi" za signal stvore novu dretvu koja ga obradjuje, pa * program odjednom postaje visedretveni! Broj signala na Windowsima je znatno * manji nego na UNIXu. Konkretno ovdje se koristi SIGINT (Ctrl+C). * Signali su na "windowsima" nešto što se baš i ne koristi ili se rijetko * koristi (postoje drugi slični mehanizmi). * Primjetiti da se pamte SVI primljeni signali (i obrađuju), a ne samo još * jedan, kako je to na UNIXu. * Isprobati ostale načine generiranja prekida (Ctrl+Break). * * Prevođenje iz MS VS: dovoljno je upisati "cl 01_signali.c" iz komandne linije u * kojoj su podešene sve varijable ("Visual Studio 2005 Command Prompt"). */ #include #include #include #include void prekidna_rutina(int sig){ int i; signal(SIGINT, prekidna_rutina); printf(" Poceo obradjivati prekid\n"); for(i=0;i<=10;i++){ printf(" Obradjujem prekid %d0%%\n",i); Sleep(500); } printf(" Zavrsio obradjivati prekid\n"); } int main(void){ int i; signal(SIGINT, prekidna_rutina); printf("Poceo osnovni program PID=%d\n", _getpid()); /* trosi vrijeme da se ima sta prekinuti */ for(i=0;i<=100;i++){ printf("Glavni program %d%%\n",i); Sleep(1000); } printf ("Zavrsio osnovni program\n"); return 0; }