您的位置:首页 > 其它

【VxWorks系列】任务间同步与通信之消息队列

2013-07-15 13:29 239 查看
前文介绍过,信号量可以控制任务间的同步与互斥,那实际的任务间数据传递通信呢?VxWorks提供了消息队列来实现这个机制。消息队列的使用非常简单,通过如下这些API就可以满足需求:
创建消息队列:msgQCreate( )
删除消息队列:msgQDelete( )
发送消息:msgQSend( )
接收消息:msgQReceive( )
实际应用中,比较常见的是Server-Client模型,如下图所示,服务端任务提供接收的消息队列,客户端任务本身可以通过该消息队列向服务端发送请求,客户端任务也提供接收请求响应结果的消息队列,服务端收到请求后进行相应处理,然后可以通过客户端的消息队列返回执行结果。




VxWorks提供的消息队列功能还是比较强大的。
首先不管是发送还是接收的接口,都支持设置等待超时时间,这个还是想到有用的, 毕竟实际应用中,很多时候都并不想永久等待,而如果需要自己来实现这个超时时间的话还是会费点周折的。
其次,在发送消息时,有参数可以把消息指定为MSG_PRI_NORMAL或者MSG_PRI_URGENT,对Normal消息,发送时会加在队列的末尾,而对Urgent消息,则会加在队列头的位置。
另外,跟信号量类似,创建消息队列时,也有选项可以支持MSG_Q_FIFO或MSG_Q_PRIORITY,用法跟信号量类似,这里就不多作说明了。
而在VxWorks中,还有另一种机制,功能类似于消息队列,就是管道Pipe,我将在下一篇文章中介绍管道,大家到时能了解到管道的特点,以及跟消息队列的区别。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: