我无法将evp
参数设置为NULL
,但是我想在计时器处理程序中接收timerid
,就像将其设置为NULL
一样。我正在考虑打电话给:
struct sigevent se;
se.sigev_notify = SIGEV_THREAD;
se.sigev_notify_attributes = {};
se.sigev_notify_function = timer_handler;
timer_create(CLOCK_MONOTONIC, &se, &se.sigev_value);
我不确定,即使它奏效,我是否也应该这样做。是否有另一种方法可以在计时器处理程序中获取
timerid
,而无需将evp
设置为NULL
? 最佳答案
这绝对是无效的,因为timer_t
可能比int
长。另外,将指针传递给并集与将指针传递给其成员之一并不相同。
您需要执行以下操作:
timer_t timerid;
struct sigevent se = { 0 };
se.sigev_notify = SIGEV_THREAD;
se.sigev_value.sival_ptr = &timerid;
se.sigev_notify_function = timer_handler;
if (timer_create(CLOCK_MONOTONIC, &se, &timerid) < 0)
abort(); // or whatever
// later...
if (timer_delete(timerid) < 0)
abort();
换句话说,您需要分配空间来容纳
timerid
,松开指向sigevent
结构中的指针,并记住在完成操作后删除计时器。另外,您应始终检查系统调用是否有错误,并进行其他操作,以免发生任何意外。
关于c++ - timer_create和timerid,可以吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23848031/