我无法将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/

10-13 03:31