0418
来源:互联网 发布:太极线指标软件 编辑:程序博客网 时间:2024/06/02 03:15
查询一个消息队列的状态,OSQQuery()
- OSQQuery()函数使用户可以查询一个消息队列的当前状态。程序清单 L6.27是该函数的源代码。OSQQuery()需要两个参数:一个是指向消息队列的指针pevent。它是在建立一个消息队列时,由OSQCreate()函数返回的;另一个是指向OS_Q_DATA(见uCOS_II.H)数据结构的指针pdata。该结构包含了有关消息队列的信息。在调用OSQQuery()函数之前,必须先定义该数据结构变量。OS_Q_DATA结构包含下面的几个域:
- .OSMsg 如果消息队列中有消息,它包含指针.OSQOut所指向的队列单元中的内容。如果队列是空的,.OSMsg包含一个NULL指针。
- .OSNMsgs是消息队列中的消息数(.OSQEntries的拷贝)。
- .OSQSize是消息队列的总的容量
- .OSEventTbl[]和.OSEventGrp是消息队列的等待任务列表。通过它们, OSQQuery()的调用函数可以得到等待该消息队列中的消息的任务总数。
- OSQQuery()函数首先检查pevent指针指向的事件控制块是一个消息队列[L6.27(1)],然后复制等待任务列表[L6.27(2)]。如果消息队列中有消息[L6.27(3)],.OSQOut指向的队列单元中的内容被复制到OS_Q_DATA结构中[L6.27(4)],否则的话,就复制一个NULL指针[L6.27(5)]。最后,复制消息队列中的消息数和消息队列的容量大小[L6.27(6)]。
- 程序清单 L6.27 程序消息队列的状态
- INT8U OSQQuery (OS_EVENT *pevent, OS_Q_DATA *pdata)
- {
- OS_Q *pq;
- INT8U i;
- INT8U *psrc;
- INT8U *pdest;
- OS_ENTER_CRITICAL();
- if (pevent->OSEventType != OS_EVENT_TYPE_Q) { (1)
- OS_EXIT_CRITICAL();
- return (OS_ERR_EVENT_TYPE);
- }
- pdata->OSEventGrp = pevent->OSEventGrp; (2)
- psrc = &pevent->OSEventTbl[0];
- pdest = &pdata->OSEventTbl[0];
- for (i = 0; i < OS_EVENT_TBL_SIZE; i++) { *pdest++ = *psrc++;
- }
- pq = (OS_Q *)pevent->OSEventPtr;
- if (pq->OSQEntries > 0) { (3)
- pdata->OSMsg = pq->OSQOut; (4)
- } else {
- pdata->OSMsg = (void *)0; (5)
- }
- pdata->OSNMsgs = pq->OSQEntries; (6)
- pdata->OSQSize = pq->OSQSize;
- OS_EXIT_CRITICAL();
- return (OS_NO_ERR);
- }
0 0
- 0418
- 0418总结
- 0418PHP
- 0418-后代选择器
- 0418-子元素选择器
- 0418-交集选择器
- 第二十一天总结0418
- 前端开源项目周报0418
- 基于visual Studio2013解决C语言竞赛题之0418位数操作
- 正则表达式-检测是否是本地电话,如010-12345678,0418-12345678
- 结合GSM协议文档与Tems工具捕捉到的GSM手机数据,分析L3消息。以0418-8r0为例.
- java spring 定时器汇总
- 多线程之内存可见性Volatile(一)
- QQ登录第三方接口研究(2)-接入规范
- 关于spring mvc + shiro 的登陆认证
- 栈
- 0418
- ThinkPHP之多层MVC
- unlocked_ioctl和compat_ioctl
- kotlin与Spring, 默认类,方法,property为final带来的问题--依赖注入失效,NullPointerException异常
- 【PHP】PHP中static和self的区别
- java jvm详解
- (38):检查参数的有效性
- 奇异值分解SVD
- 代码模块化管理和提升web性能的知识点