如何阻止poll()被特定信号中断

时间:2015-09-01 18:23:54

标签: c linux timer signals

我有一个使用poll的C应用程序来等待一些数据。

目前我正在将其余的应用程序实现到此应用程序中,并使用基于时间的中断(SIGRTMIN)。正如预期的那样,如果我的其他计时器之一回拨,poll()会返回。

如何阻止民意调查呢?我正在阅读很多关于ppoll(),但不知道如何使用它...我可以使用它来阻止此函数在触发计时器事件时返回吗?

(民意调查延迟几毫秒我没有任何问题)

1 个答案:

答案 0 :(得分:2)

如果poll()中的线程/进程阻塞收到未阻止的信号,则poll() 中断。如果您不希望这种情况发生,那么您可以在致电poll()之前阻止所需信号,然后在poll()返回后取消阻止(请参阅sigprocmask())。但请注意,这不会导致poll()延迟 - 恰恰相反。如果有的话,它将导致接收信号被延迟。如果poll()阻塞的时间足够长,那么它可能会导致多个RT信号排队,因此在您取消阻止该信号后,您会快速连续多次接收它。

您应该考虑检查poll()的返回值(您应该始终执行此操作)并重试EINTR