关闭

QNX操作系统信息传递

发表于:2013-7-18 10:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:lc598470345    来源:51Testing软件测试网采编

  1.pidin用于查看进程,线程,状态

  2.多线程+消息传递模型(并行/并发)

  2.1服务器/子服务器模型(应答驱动的消息传递)

  一个工作进程首先向服务器发送一条消息表示可以开始工作了,服务器不马上应答,仅仅是记住该进程已经注册。该进程进入REPLY阻塞状态。在后来某个时刻当服务器需要某项结果的时候,就可以向工作进程发送回答消息,然后,该工作进程执行指定的动作,并向服务器发送一个消息提交结果

  2.2发送驱动的消息传递

  服务器不断把自己处于RECEIVE阻塞状态中,以便等待客户端的请求,在这期间,客户进程发送的消息将启动服务器进程的一个动作的执行,服务器完成操作并向客户进程发送回答消息。

  2.3消息处理过程中的小技巧

  因为主线程给工作线程派发任务,那么主线程不能出现阻塞的情况。在传统的发送驱动的消息传递的方式中,我们常常让主线程创建工作线程然后发送消息给它,这样会导致一个问题就是,这期间主线程不能给其他工作线程发送消息,这大大降低了多个工作节点的优势。

  解决这个问题的办法是从工作线程主动发起请求,等待服务器派发任务,当有其他线程告诉服务器该去做什么任务,服务器再把任务派发给已经在等待的工作线程。这样就使得工作线程应对具体业务,而主线程等待客户请求,主线程不用再被任何一个工作线程阻塞。

  2.4多线程服务器模型

  3.使用QNX基本消息

  3.1消息传递API

ChannelCreate(), ChannelDestroy()
ConnectAttach(), ConnectDetach()
MsgDeliverEvent()
MsgError()
MsgRead(), MsgReadv()
MsgReceive(), MsgReceivePulse(), MsgReceivev()
MsgReply(), MsgReplyv()
MsgSend(), MsgSendnc(), MsgSendsv(), MsgSendsvnc(), MsgSendv(), MsgSendvnc(), MsgSendvs(), MsgSendvsnc()
MsgWrite(), MsgWritev()

  最常用的函数:

  ChannelCreate(), ConnectAttach(), MsgReply(), MsgSend(), and MsgReceive().

  3.2客户端消息传递

  3.2.1建立消息发送通道

int coid = ConnectAttach (int nd,
pid_t pid,
int chid,
unsigned index,
int flags);

  "ND/PID/CHID,"网络节点描述符号(哪一台计算机,0表示本机)/进程ID/频道ID。

  断开链接:ConnectDetach (coid);

  3.2.2发送消息

int MsgSend (int coid,
const void *smsg,
int sbytes,
void *rmsg,
int rbytes);

51/512345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号