GUI

RTGUI 发送消息队列失败

发布于 2015-02-13 08:37:05
问题现象:使用RTGUI过程中,发现在某些情况下出现发送event失败情况:send event to Wire number application failed.
Wire number application是创建app的名字。
问题分析:是在rtgui_send()函数发送消息队列失败,rt_mq_send()返回值为-3,即RT_EFULL,消息队列满了。
问题解决:该问题是在异常情况下出现的,出现时,可以丢弃mq中的消息。
增加rtgui_app_create()创建app时,mq的大小。原有mq大小为32。
app->mq = rt_mq_create(mq_name, sizeof(union rtgui_event_generic), 32, RT_IPC_FLAG_FIFO);

------------------------
请问将原有32个消息,增加为64个或更大,除直接修改rt_mq_create中的个数外,还需注意什么。
还有更好的方式吗,大家都是怎么处理的?

查看更多

关注者
0
被浏览
1.3k
4 个回答
Dragon2012
Dragon2012 2015-02-13
自己顶一下。
或者在发送失败时,清一下mq
rt_mq_control(app->mq, RT_IPC_CMD_RESET, 0)
grissiom
grissiom 2015-02-13
发送失败基本上是因为你的应用死掉了。

不要清空队列,否则丢失的消息可能会使得逻辑乱掉(如果你的应用能活过来)。

当然,丢掉的消息也可以使得逻辑乱掉。所以这时候你应该去查 app 哪里有 bug。
Dragon2012
Dragon2012 2015-02-13
发送失败基本上是因为你的应用死掉了。

不要清空队列,否则丢失的消息可能会使得逻辑乱掉(如果你的应用能活过来)。

当然,丢掉的消息也可以使得逻辑乱掉。所以这时候你应该去查 app 哪里有 bug。

---------------
用了两种方式试了,问题照旧。
我查app问题吧。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友