查询一个信号量的当前状态, OSSemQuery()
来源:互联网 发布:大数据架构详解 编辑:程序博客网 时间:2024/06/12 01:01
在应用程序中,用户随时可以调用函数OSSemQuery()[程序清单L6.13]来查询一个信号量的当前状态。该函数有两个参数:一个是指向信号量对应事件控制块的指针pevent。该指针是在生产信号量时,由OSSemCreate()函数返回的;另一个是指向用于记录信号量信息的数据结构OS_SEM_DATA(见uCOS_II.H)的指针pdata。因此,调用该函数前,用户必须先定义该结构变量,用于存储信号量的有关信息。在这里,之所以使用一个新的数据结构的原因在于,调用函数应该只关心那些和特定信号量有关的信息,而不是象OS_EVENT数据结构包含的很全面的信息。该数据结构只包含信号量计数值.OSCnt和等待任务列表.OSEventTbl[]、.OSEventGrp,而OS_EVENT中还包含了另外的两个域.OSEventType和.OSEventPtr。
和其它与信号量有关的函数一样,OSSemQuery()也是先检查pevent指向的事件控制块是否是OSSemCreate()产生的[L6.13(1)],然后将等待任务列表[L6.13(2)]和计数值[L6.13(3)]从OS_EVENT结构拷贝到OS_SEM_DATA 结构变量中去。
程序清单 L6.13 查询一个信号量的状态
INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *pdata)
{
INT8U i;
INT8U *psrc;
INT8U *pdest;
OS_ENTER_CRITICAL();
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { (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++;
}
pdata->OSCnt = pevent->OSEventCnt; (3)
OS_EXIT_CRITICAL();
return (OS_NO_ERR);
}
- 查询一个信号量的当前状态, OSSemQuery()
- 获取对象的当前状态
- 如何显示子线程的当前状态
- 查询指定sequence的当前值 oracle
- 一个日历形式显示的当前时间
- 修改一个oracle序列的当前值
- 怎样修改一个序列的当前值
- 转:在C#中获取打印机的当前状态
- jQuery - Ajax - readyState获取请求操作的当前状态
- 《Windows核心编程》---获得内存的当前状态のGlobalMemoryStatusEx
- 连接未关闭。连接的当前状态为已打开
- InvalidOperationException: 对象的当前状态使该操作无效
- System.InvalidOperationException: 对象的当前状态使该操作无效
- InvalidOperationException: 对象的当前状态使该操作无效
- C#中对象的当前状态使该操作无效。
- 对象的当前状态使该操作无效-asp.net
- 对象的当前状态使该操作无效
- 对象的当前状态使该操作无效-asp.net
- 计算机网络概述(发展过程,分类,参考模型,IP地址)
- 负载均衡1.1
- ActiveMQ实现负载均衡+高可用部署方案
- 模型加载时出现带透明纹理的模型会透过不透明模型问题
- PPM、PGM、PBM三种都是图像文件格式
- 查询一个信号量的当前状态, OSSemQuery()
- 【设计模式】桥接模式
- zookeeper伪集群模式安装和配置
- java.util.Stack
- spring进阶(二)事务
- Socket之Client端
- 欢迎来到Cam少爷的世界丶
- win32 VS2013+opencv2.4.13安装与配置->win 10 64位
- asp.net html 图片滚动不留空白