【发布时间】:2017-08-05 08:10:21
【问题描述】:
我有一个每秒触发 SIGALRM 的示例程序。以下是我的代码。
#include <signal.h>
#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
volatile sig_atomic_t _flag = false;
void _sigHandler( int signal )
{
_flag = true;
}
int main()
{
signal( SIGALRM, _sigHandler );
alarm( 1 );
while (true)
{
if ( _flag)
{
printf( "SIGALRM received\n" );
_flag = false;
alarm( 1 );
}
}
}
我的问题是,是否可以根据传递给 alarm() 的参数为同一信号设置多个信号处理程序;方法。例如。如果我调用 alarm(1) 和 alarm(2),则必须调用两种不同的方法。
好吧,我在这里使用警报的想法是,我想在 3 个不同的时间间隔内调用三种不同的方法。例如调用 func1();每 X 秒后,每 Y 秒后调用 func2(),每 Z 秒后调用 func3(),这将在无限循环中运行。如果警报的想法不适合这里,那么任何其他提示/帮助将不胜感激。
【问题讨论】:
-
没有。每个信号(类型)都只有一种处理方式。您可以注册同一个函数来处理一种以上的信号,但您不能注册多个函数来处理同一种信号。
-
如果
funcX应该每X秒运行一次,而funcY应该每Y秒运行一次,如果自上次以来一直是X秒,请调用funcX调用它的时间,如果自上次调用以来已经过Y秒,则调用funcY。 -
关于多路复用超时信号,我写了一个例子here。