为什么timer_create抛出solaris 10中的SIGEV_THREAD错误?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么timer_create抛出solaris 10中的SIGEV_THREAD错误?相关的知识,希望对你有一定的参考价值。

我通过使用timer_create写了一段来设置定时器来调用一个线程,其中我将sigev_notify设置为SIGEV_THREAD,它给我错误EINVAL(无效参数)但是当我设置sigev_notify时SIGEV_SIGNAL代码工作正常。

我的这段代码即使在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);

}

请帮我解决这个问题。

提前致谢...

答案

根据this man-page,Solaris 10不知道SIGEV_THREAD,但仅限于

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

SIGEV_NONE

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

SIGEV_SIGNAL

当感兴趣的事件发生时,生成具有应用定义值的排队信号。

SIGEV_PORT

当感兴趣的事件发生时,异步通知被传递到事件端口。 sival_ptr成员指向port_notify_t结构(见port_associate(3C))。事件端口标识符以及应用程序定义的cookie是port_notify_t结构的一部分

以上是关于为什么timer_create抛出solaris 10中的SIGEV_THREAD错误?的主要内容,如果未能解决你的问题,请参考以下文章

linux centos timer_create接口

linux下定时器的使用--timer_create等函数集

Java千百问_01基本概念(010)_Solaris操作系统是什么

什么进程正在监听 Solaris 上的某个端口?

Solaris 音频 API

为啥 Solaris 汇编器生成的机器代码与这里的 GNU 汇编器不同?