在linux中使用单一信号处理程序创建多个计时器?

时间:2014-02-27 17:41:55

标签: c linux timer handler rtos

我创建了一个包含单个信号处理程序的程序来处理多个计时器。此计时器用于每2ms,10ms等调用特定任务。但它没有用。任何人都可以帮助我:(

http://www.graphics-muse.org/wp/?p=868 how to solve this multiple linux timer with single signal handler

1 个答案:

答案 0 :(得分:0)

您可以实施以下内容:

  1. 使用sigaction设置信号处理程序,确保处理程序的签名为void handler(int, siginfo_t*, void*)

  2. 使用timer_create创建多个计时器,每个计时器指定不同的sigevent结构(特别是sigev_value)。

  3. 在信号处理程序中,处理siginfo_t结构并使用以下任一字段来确定哪个计时器已过期si_intsi_ptr(其中一个将对应于{2}中的sigev_value或使用si_timerid。当然,如果您使用si_timerid字段,则无需在步骤2中定义sigev_value

  4. 这样,信号处理程序可以识别哪个定时器触发了信号并且可以采取适当的行动。