我创建了一个包含单个信号处理程序的程序来处理多个计时器。此计时器用于每2ms,10ms等调用特定任务。但它没有用。任何人都可以帮助我:(
http://www.graphics-muse.org/wp/?p=868 how to solve this multiple linux timer with single signal handler
答案 0 :(得分:0)
您可以实施以下内容:
使用sigaction
设置信号处理程序,确保处理程序的签名为void handler(int, siginfo_t*, void*)
。
使用timer_create
创建多个计时器,每个计时器指定不同的sigevent
结构(特别是sigev_value
)。
在信号处理程序中,处理siginfo_t
结构并使用以下任一字段来确定哪个计时器已过期si_int
,si_ptr
(其中一个将对应于{2}中的sigev_value
或使用si_timerid
。当然,如果您使用si_timerid
字段,则无需在步骤2中定义sigev_value
。
这样,信号处理程序可以识别哪个定时器触发了信号并且可以采取适当的行动。