Bra*_*tes 2 c linux signals timer
我正在构建两个静态c库.每个库都有一个例程,在调用mylib_init()之后需要每秒运行一次;
我使用setitimer在每个库中实现了这个,它使用ITIMER_REAL资源和SIGALRM信号.
void Start1msTimer()
{
struct itimerval new;
memset(&new,0, sizeof(new));
new.it_interval.tv_sec=1;
new.it_value.tv_sec=1;
signal (SIGALRM, OneSecTimeout);
setitimer (ITIMER_REAL, &new,NULL);
}
Run Code Online (Sandbox Code Playgroud)
好到目前为止一切都很好.
现在我正在构建一个使用这两个库的示例应用程序,并且正在产生冲突.我已经意识到一个应用程序每个信号只能有一个处理程序,而ITIMER_REAL只能用于一个计时器,而不能同时用于两个计时器.显然事情现在不起作用.
对我来说,在每个库中实现时序的更好方法是什么?
一般来说,在库中有任何信号处理程序是一个坏主意吗?
是的,在库中"使用"应用程序级资源是一个非常糟糕的主意,因为使用该库的应用程序开发人员不会对如何分配资源发表意见.
而且,正如您所发现的,当多个库想要拥有相同的资源时,您会遇到互操作性问题.
解决此问题的一种方法是分解需求,具有mylib_update()应用程序必须每秒调用一次的函数和文档.这就留下了如何对应用程序实现这种基于计时器的更新的问题.