2 つの静的 C ライブラリを構築しています。各ライブラリには、mylib_init() を呼び出した後、毎秒 1 回実行する必要があるルーチンがあります。
ITIMER_REAL リソースと SIGALRM シグナルを使用する setitimer を使用して、各ライブラリにこれを実装しました。
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);
}
これまでのところ、すべてがうまく機能していました。
現在、これらのライブラリの両方を使用するサンプル アプリケーションを作成していますが、競合が発生しています。アプリケーションはシグナルごとに 1 つのハンドラーしか持てず、ITIMER_REAL は両方ではなく 1 つのタイマーにしか使用できないことに気付きました。したがって、明らかに物事は現在機能していません。
各ライブラリにタイミングを実装するためのより良い方法は何ですか?
一般に、ライブラリ内にシグナル ハンドラを配置することは悪い考えですか?