我有一个练习,我必须实现一个函数,该函数将一个参数函数指针fun
、一个由所述指针指向的函数的参数parameter
和一个整数作为参数period
。如果函数的执行fun
指向 with parameter
as 参数在几秒之前终止,则此函数将返回 1,否则返回period
0。
这两种解决方案是否等效?
static struct sigaction sa, old;
static jmp_buf env;
static void myalarm(int sig)
{
printf("alarm!\n");
siglongjmp(env,1);
}
int execution_time_limit( void (*fun)(void *), void *parameter, int period)
{
sa.sa_handler = myalarm;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
sigaction(SIGALRM, &sa, &old);
alarm(period);
if(sigsetjmp(env,1) == 0) {
fun(parameter);
sigaction(SIGALRM, &old, NULL);
}
else
return 0;
return 1;
}
和:
static struct sigaction sa, old;
static jmp_buf env;
int ret = 0;
static void myalarm(int sig)
{
printf("alarm!\n");
ret = 1;
}
int execution_time_limit( void (*fun)(void *), void *parameter, int period)
{
sa.sa_handler = myalarm;
sa.sa_flags = 0;
sigemptyset(&sa.sa_mask);
sigaction(SIGALRM, &sa, &old);
alarm(period);
fun(parameter);
sigaction(SIGALRM, &old, NULL);
return ret;
}
我会说是的,但我想澄清我可能有的任何疑问。