-1

我正在尝试做的主要思想:

我的目标是每 1 秒调用一次 alarm_handler,尽管有其他信号(在本例中为 SIGUSR2)。为此,我在 pause() 语句之前编写了 alarm(1)。

但是,实际上发生的事情是,如果我多次收到 SIGUSR2 信号,则永远不会调用 alarm_handler (而我确实希望每 1 秒调用一次)。

注意:我不想忽略 SIGUSR2 信号。我希望它们完成,但我必须确保每 1 秒完成一次 alarm_handler。

这是主要的:

int main(int argc, const char* argv[])
{
signal(SIGUSR2, sig_readPipe);
signal(SIGALRM, alarm_handler);

do
{
    alarm(1);
    pause();
}while(stopFlag);

return 0;
}

这里是信号处理程序:

void sig_readPipe(int sig)
{
signal(SIGUSR2, sig_readPipe);
.
.
.
}

void alarm_handler(int sig)
{
signal(SIGALRM, alarm_handler);
.
.
.
}
4

1 回答 1

2

将每秒需要处理的任何内容放入一个单独的函数中,并在该函数中将全局计数器设置为当前时间。每次调用任何信号处理程序时,它都应检查计数器是否与当前秒匹配,如果不匹配,则调用 run_this_every_second()。

于 2013-04-21T15:27:12.853 回答