#include<stdio.h>
#include<setjmp.h>
#include<signal.h>
jmp_buf env;
void alarmHandler()
{
printf("\n in alarm Handle");
longjmp(env,1);
}
int main()
{
signal(SIGALRM,alarmHandler);
alarm(2);
for(;;)
{
printf("\nhello");
sleep(1);
if(setjmp(env))
{
printf("\n inside if");
signal(SIGALRM,alarmHandler);
alarm(2);
}
}
return 0;
}
Beim Start überwachen die Aktiven das Signal und dann den aktiven Alarm für 2 Sekunden (Countdown). Innerhalb der for
Schleife, jedes Mal, es speichert setjmp(env)
als Zeit endet zuletzt setjmp(env)
wird mit longjmp()
aufgerufen werden. Als setjmp()
standardmäßig 0 zurückgeben, wenn von longjmp()
aufgerufen wird, was auch immer der zweite Arg-Wert ist, ist dieser Wert zurückgeben.Warum funktioniert SIGALRM nicht zum zweiten Mal?
Bitte den Code einrücken; Es ist wirklich schwer zu lesen, wenn es keine Einrückung gibt! –
Beachten Sie, dass 'setjmp()' beim ersten Aufruf Null zurückgibt und bei Rückgabe von 'longjmp()' ungleich Null zurückgibt. Sie sollten Ihre 'printf()' auch mit einem Zeilenumbruch beenden. Andernfalls wird die Ausgabe möglicherweise nicht angezeigt. –
@ JonathanLeffler machte Änderung in 'printf()' immer noch nicht funktioniert! – neileap