2015-10-26 368 views
2

我有一個問題,因爲我不知道該怎麼_pulse接收工作。如果我有我的數據結構QNX MsgReceive脈衝

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,但程序是如何知道它需要發送_pulse以msg(我定義的結構)的形式出現,或者它是如何工作的。另外是_IO_CONNECT一個脈衝?如果是,爲什麼它沒有rcvid == 0? - 根據http://www.qnx.com/developers/docs/6.3.2/neutrino/lib_ref/n/name_attach.html

+0

OK,根據http://www.qnx.com/developers/docs/qnxcar2/index.jsp?topic=%2Fcom.qnx.doc.neutrino.technotes%2Ftopic%2Fasync_messaging_Example6.html _IO_CONNECT是不是一個錯誤,而不是一個脈衝,因此一條消息(系統消息,我想)。但我仍然不知道MsgReceive如何識別我的結構。 – user3613919

回答

1

1 - _IO_CONNECT不用於脈衝。它用於連接系統調用資源管理器。例如系統調用是開放的(),close()方法等

2 - 你需要知道服務器或客戶機是否正在等待脈衝消息與否。對於脈衝的消息中的資源管理器的阻擋功能會MsgReceivePulse()和客戶機將使用MsgSendPulse()。

MsgSend()是用於正常消息和MsgSendPulse()是用於發送脈衝消息。 同樣MsgReceive()用於接收用於接收脈衝消息普通消息和MsgReceivePulse()。有關更詳細的描述,請參閱QNX文檔。

兩種變體具有不同的參數,如功能脈衝消息沒有對返回數據的任何參數,因爲脈衝是非阻塞小消息不爲任何答覆方框但功能正常的消息具有用於接收數據的參數。

1

您需要創建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);