【发布时间】:2015-12-10 18:15:54
【问题描述】:
我有一个练习,我必须实现一个函数,该函数将一个参数函数指针fun、一个指向由所述指针parameter 指向的函数的参数和一个整数period 作为参数。如果函数fun 以parameter 作为参数在period 秒之前终止,则此函数将返回1,否则返回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;
}
我会说是的,但我想澄清我可能有的任何疑问。
【问题讨论】: