线程通信之消息队列是环形队列吗?

2019-12-2 21:39 [复制链接] 3 80

线程通信之消息队列是环形队列吗?我在想,如果不是环形队列,假溢出怎么办?6 f" `& H0 |3 `0 b* E( I5 D
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 7 天前 | 显示全部楼层
以下回答,引用官方文档中心内容,链接:https://www.rt-thread.org/docume ... nual/ipc2/ipc2/#_13
1 E" v7 D* N; F  n& A+ P9 L! a线程或者中断服务程序都可以给消息队列发送消息。当发送消息时,消息队列对象先从空闲消息链表上取下一个空闲消息块,把线程或者中断服务程序发送的消息内容复制到消息块上,然后把该消息块挂到消息队列的尾部。当且仅当空闲消息链表上有可用的空闲消息块时,发送者才能成功发送消息;当空闲消息链表上无可用消息块,说明消息队列已满,此时,发送消息的的线程或者中断程序会收到一个错误码(-RT_EFULL)。发送消息的函数接口如下:2 U# m" L" ?1 ?" e! L. m: d3 a: O
+ q" n+ z: |# s( |+ `7 T# r3 j
rt_err_t rt_mq_send (rt_mq_t mq, void* buffer, rt_size_t size);
/ t) V& _5 f% O% B  I1 N- a7 ?发送消息时,发送者需指定发送的消息队列的对象句柄(即指向消息队列控制块的指针),并且指定发送的消息内容以及消息大小。如下图所示,在发送一个普通消息之后,空闲消息链表上的队首消息被转移到了消息队列尾。下表描述了该函数的输入参数与返回值:+ L+ c1 g: A+ F! R  H

) I& x( ^: l8 {& l& Irt_mq_send() 的输入参数和返回值  ]4 w* O3 B! i

/ T" I/ v' _8 o* i参数        描述
$ I4 ]/ t7 E: I7 s! u: omq        消息队列对象的句柄2 b) y, E+ A! M# r
buffer        消息内容
. k% @, ?- a! ~5 {! b$ |size        消息大小
0 Y2 y  O% J. W" e2 }3 F) t  x. x返回        ——
: k5 ]( a1 a- {RT_EOK        成功. R' k$ {$ [! P. _
-RT_EFULL        消息队列已满3 {  O8 N" n# R9 ~% P: F: A
-RT_ERROR        失败,表示发送的消息长度大于消息队列中消息的最大长度
使用道具 举报 回复
发表于 7 天前 | 显示全部楼层
whj467467222 发表于 2019-12-3 09:52* H) O( |% S5 ]0 b1 n5 q
以下回答,引用官方文档中心内容,链接:https://www.rt-thread.org/document/site/programming-manual/ipc ...
& l0 I0 s/ o1 F$ ^1 i# P/ S( I
没看出结果来
使用道具 举报 回复
发表于 7 天前 | 显示全部楼层
LLD1252310732 发表于 2019-12-3 15:27& d: s( ]7 ^. Q9 }( h9 m9 _0 C
没看出结果来
+ x  S9 L. a. x4 ]; ^4 l
RT_EOK        成功
6 u5 j( J- r$ K# h4 i-RT_EFULL        消息队列已满
9 v0 {2 r' r$ {5 S7 ]& F7 c4 [-RT_ERROR        失败,表示发送的消息长度大于消息队列中消息的最大长度
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表