我正在编写一个多线程应用程序。其中一个线程需要定期执行一些工作,因此我使用setitimer
设置计时器,并在计时器到期时将SIGALRM
发送到进程。
问题是我事先不知道哪个线程会收到信号。
这可以通过为每个线程设置信号掩码来轻松解决,这样只有一个线程可以接收SIGALRM
。但在这种特殊情况下,这似乎并不合适,因为计时器在应用程序的一个模块中注册,这些模块也可用于其他程序。 (作为共享的代码片段。它是某种特殊USB设备的通信包装器。)
建议(和标准)方法需要此代码的用户
这似乎不对。
对于一个可重复使用的代码需要定时器来运行的情况,这可能是一个常见的解决方案,这可能会干扰程序其余部分的运行?
感谢您的任何见解。
答案 0 :(得分:1)
您可以使用pthread_kill
来发信号给定一个帖子。然后,您可以使用在受控循环中调用sleep
和pthread_kill
的守护程序线程来为给定的线程计时。
如果您关心全球流程计时器与睡眠的互动,那么您可以使用usleep
(或nanosleep
)。