QNX MsgReceive Pulse

时间:2015-10-26 22:15:51

标签: qnx msg pulse

我有一个问题,因为我不知道_pulse接收是如何工作的。如果我有我的数据结构

typedef struct _my_data {
msg_header_t hdr;
int data;
} my_data_t;

我只收到我的消息我不知道它是否是脉冲

my_data_t msg;
...
rcvid = MsgReceive(g_Attach->chid, &msg, sizeof(msg), NULL);

当rcvid = 0但是程序如何知道它需要以msg(我定义的结构)的形式发送_pulse,否则它是如何工作的。另外是_IO_CONNECT脉冲?如果是,为什么它没有rcvid == 0? - 根据http://www.qnx.com/developers/docs/6.3.2/neutrino/lib_ref/n/name_attach.html

2 个答案:

答案 0 :(得分:1)

您需要创建channelconnection,例如

chid=ChannelCreate(0);
int pid=getpid();
coid=ConnectAttach(0, pid, chid, 0, 0);

并将频道附加到连接.............

然后,如果你有两个线程...............从一个线程你可以调用MsgSend函数,例如MsgSend(coid, &(message), sizeof(message), &rmsg, sizeof(rmsg));和另一个线程{{1} }

答案 1 :(得分:1)

1 - _IO_CONNECT不用于脉冲。它用于连接系统调用资源管理器。示例系统调用是open(),close()等。

2 - 您需要知道服务器或客户端是否正在等待脉冲消息。对于脉冲消息,资源管理器中的阻塞功能将是 MsgReceivePulse (),客户端将使用 MsgSendPulse ()。

MsgSend ()用于正常消息, MsgSendPulse ()用于发送脉冲消息。 类似地, MsgReceive ()用于接收普通消息, MsgReceivePulse ()用于接收脉冲消息。有关详细说明,请参阅QNX文档。

两种变体都有不同的参数,例如脉冲消息的函数没有任何返回数据参数,因为脉冲是非阻塞小消息,不阻止任何回复,但普通消息的函数具有接收数据的参数。