QNX MsgReceive 脉冲

QNX MsgReceive 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

您需要创建 channelconnection,例如

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

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

那么如果你有两个线程........你可以从一个线程中调用 MsgSend 函数,例如 MsgSend(coid, &(message), sizeof(message), &rmsg, sizeof(rmsg)); 并且在另一个线程中 rcvid=MsgReceive(chid, (void*)&message, sizeof(message),NULL);

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

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

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

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