在c静态库中使用定时器/信号是不好的做法?

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只能用于一个计时器,而不能同时用于两个计时器.显然事情现在不起作用.

对我来说,在每个库中实现时序的更好方法是什么?

一般来说,在库中有任何信号处理程序是一个坏主意吗?

unw*_*ind 5

是的,在库中"使用"应用程序级资源是一个非常糟糕的主意,因为使用该库的应用程序开发人员不会对如何分配资源发表意见.

而且,正如您所发现的,当多个库想要拥有相同的资源时,您会遇到互操作性问题.

解决此问题的一种方法是分解需求,具有mylib_update()应用程序必须每秒调用一次的函数和文档.这就留下了如何对应用程序实现这种基于计时器的更新的问题.