如何将参数(例如指向结构的指针)传递给信号处理程序? 我正在编写一个多线程应用程序,所以我不能使用全局变量
我将计时器与每个线程相关联。当计时器到期时,我必须更新结构(每个线程都有不同的结构)。
我该怎么办?
答案 0 :(得分:1)
系统调用信号处理程序的方式是固定的 - 没有办法改变它并添加额外的用户指针。因此,如果您想在信号处理程序中获取其他数据,唯一的方法是使用全局变量(可以是线程本地的)。
但是,如果您尝试将timer_create
与线程一起使用,那么使用SIGEV_THREAD
而不是SIGEV_SIGNAL
会更好。后者将信号发送到进程而不是线程,因此它可能被进程中的任何线程捕获。
答案 1 :(得分:1)
POSIX计时器允许使用sigevent(7)中记录的struct sigevent
结构指定流程如何通知过期的详细信息。
要将上下文信息传递给生成信号的siggnal处理程序,您可以设置.sigev_value.sival_ptr
成员,然后您的信号处理程序将能够检索(您需要通过{设置信号处理程序) {1}}成员{1}},同时确保结构的.sa_sigaction
与struct sigaction
进行了对比。