C++ 为什么在solaris 10中为SIGEV线程创建计时器抛出错误?

C++ 为什么在solaris 10中为SIGEV线程创建计时器抛出错误?,c++,c,timer,signals,solaris-10,C++,C,Timer,Signals,Solaris 10,我写了一篇文章,通过使用timer\u create for set定时器来调用一个线程,在这个线程中,我将sigev\u notify设置为sigev\u线程,它给了我错误EINVAL(无效参数),但是当我将sigev\u notify设置为sigev\u信号代码时,它工作正常 我的这段代码在所有操作系统中都能工作,即使在solaris 11中也是如此,但对于solaris 10,它会给我带来错误 代码如下: { int status =0; struct itimerspec ts; str

我写了一篇文章,通过使用timer\u create for set定时器来调用一个线程,在这个线程中,我将sigev\u notify设置为sigev\u线程,它给了我错误EINVAL(无效参数),但是当我将sigev\u notify设置为sigev\u信号代码时,它工作正常

我的这段代码在所有操作系统中都能工作,即使在solaris 11中也是如此,但对于solaris 10,它会给我带来错误

代码如下:

{
int status =0;
struct itimerspec ts;
struct sigevent se;

se.sigev_notify = SIGEV_THREAD;
se.sigev_value.sival_int = val;
se.sigev_notify_function = func;
se.sigev_notify_attributes = NULL;

status = timer_create(CLOCK_REALTIME, &se, timer_id);

ts.it_value.tv_sec = abs(delay);
ts.it_value.tv_nsec = (delay-abs(delay)) * 1e09;
ts.it_interval.tv_sec = abs(interval);
ts.it_interval.tv_nsec = (interval-abs(interval)) * 1e09;

status = timer_settime(*timer_id, 0, &ts, 0);
}

请帮我解决这个问题

提前感谢…

根据Solaris 10不知道
SIGEV\u线程,但只知道

sigev_notify
成员指定发生异步事件时要使用的通知机制。sigev_notify成员可使用以下值定义:

SIGEV\u无

当感兴趣的事件发生时,不会传递异步通知

SIGEV\u信号

当感兴趣的事件发生时,将生成一个排队信号,其值由应用程序定义

SIGEV\u端口

当感兴趣的事件发生时,异步通知被传递到事件端口。
sival\u ptr
成员指向一个
port\u notify\t
结构(请参见
port\u associate(3C)
)。事件端口标识符以及应用程序定义的cookie是
port\u notify\t
结构的一部分


错误在哪里?仅供参考:timer\u id是我这样定义的变量(timer\u t*timer\u id),在您传递它之前,它指向哪里?相关:如果不是复制到。非常感谢您的帮助,根据我的要求,我想在特定时间段调用函数,我对SIGEV\u端口不太了解,所以我可以使用它,如果是,请指导我。Solaris 11似乎支持Solaris 11中的
SIGEV\u线程
:在Solaris 11中,我的代码工作正常。但我的疑问是timer.h和signal.h是在glibc下定义的,那么为什么它们在solaris10中不受支持,而在solaris11中受支持呢。我打印了SIGEV_线程宏,它在solaris 10中的值为3。@ram:头只是糖。如果实现cake的库不处理它,就没有办法说服它这样做。是否有其他方法来安排我在solaris 10中的功能??