2

我有一个问题,因为我不知道 _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

4

2 回答 2

1

您需要创建channeland connection,例如

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);

于 2015-10-27T18:55:01.690 回答
1

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

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

MsgSend () 用于普通消息,MsgSendPulse () 用于发送脉冲消息。同样, MsgReceive () 用于接收普通消息,MsgReceivePulse () 用于接收脉冲消息。请参阅 QNX 文档以获得更详细的说明。

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

于 2015-12-22T07:17:20.567 回答