sigevent设置问题

首先感谢xtang推荐的两篇文章,我通过两个方法改进了程序的实时性,一是用定时器脉冲触发,不用循环delay;二是加快系统的tick,把它变成100us。但是我有疑问当程序结束之后,系统会自动恢复到1ms么?

在做sigevent设置的时候出现问题:

// — setup timer and timer event
event.sigev_notify = SIGEV_PULSE;
event.sigev_coid = ConnectAttach ( ND_LOCAL_NODE, 0, chid, 0, 0 );
event.sigev_priority = getprio(0);
event.sigev_code = 1023;
event.sigev_value.sival_ptr = (void*)pulse_id;

assert ( event.sigev_coid != -1 );

if((pidClientIdentifier = spawn(“testprioup”, 0, NULL, &inInheritance,
szArguments, NULL)) == -1)
printf("[Server] Failed to launch client: %s
“, strerror
(errno));
else
printf(”[Server] Client created with PID = %d
",
pidClientIdentifier);

程序运行到spawn处就会一直block, 我在另一个例子程序中查到sigevent设置

#define Pulse_Timer _PULSE_CODE_MINAVAIL

event.sigev_notify = SIGEV_PULSE;
event.sigev_coid = ConnectAttach(ND_LOCAL_NODE, 0, chid, _NTO_SIDE_CHANNEL, 0);
event.sigev_priority = getprio(0);
event.sigev_code = Pulse_Timer;

程序运行正常,不知是为什么?

我也在做这方面的东东,可以把你的代码发给我看看吗?谢谢了
wbn007@hotmail.com

关于pulse code:

有一些pulse code有特殊含义,一般用户可定义的pulse code在/usr/include/sys/neutrino.h 里有定义,在 _PULSE_CODE_MINAVAIL 和 _PULSE_CODE_MAXAVAIL 之间 (0 -127)。

关于加快系统的tick,除非你自已把它再改回来,它始终会在100us上。缩短tick时间,会增加系统开销,能避免还是应该尽量避免。我记得你的计时要求是 10ms,在标准的1ms tick上,你最多只会有1ms的误差,应该不需要改tick就能满足你的要求。