向消息队列发送一个消息(后进先出LIFO),OSQPostFront()
来源:互联网 发布:access录入数据 编辑:程序博客网 时间:2024/05/17 19:16
OSQPostFront()函数和OSQPost()基本上是一样的,只是在插入新的消息到消息队列中时,使用.OSQOut作为指向下一个插入消息的单元的指针,而不是.OSQIn。程序清单 L6.24是它的源代码。值得注意的是,.OSQOut指针指向的是已经插入了消息指针的单元,所以再插入新的消息指针前,必须先将.OSQOut指针在消息队列中前移一个单元。如果.OSQOut指针指向的当前单元是队列中的第一个单元[L6.24(1)],这时再前移就会发生越界,需要特别地将该指针指向队列的末尾[L6.24(2)]。由于.OSQEnd指向的是消息队列中最后一个单元的下一个单元,因此.OSQOut必须被调整到指向队列的有效范围内[L6.24(3)]。因为QSQPend()函数取出的消息是由OSQPend()函数刚刚插入的,因此OSQPostFront()函数实现了一个LIFO队列。程序清单 L6.24 向消息队列发送一条消息(LIFO)INT8U OSQPostFront (OS_EVENT *pevent, void *msg){ OS_Q *pq; OS_ENTER_CRITICAL(); if (pevent->OSEventType != OS_EVENT_TYPE_Q) { OS_EXIT_CRITICAL(); return (OS_ERR_EVENT_TYPE); } if (pevent->OSEventGrp) { OSEventTaskRdy(pevent, msg, OS_STAT_Q); OS_EXIT_CRITICAL(); OSSched(); return (OS_NO_ERR); } else { pq = pevent->OSEventPtr; if (pq->OSQEntries >= pq->OSQSize) { OS_EXIT_CRITICAL(); return (OS_Q_FULL); } else { if (pq->OSQOut == pq->OSQStart) { (1) pq->OSQOut = pq->OSQEnd; (2) } pq->OSQOut--; (3) *pq->OSQOut = msg; pq->OSQEntries++; OS_EXIT_CRITICAL(); } return (OS_NO_ERR); }}
0 0
- 向消息队列发送一个消息(后进先出LIFO),OSQPostFront()
- 栈(LIFO:后进先出)
- Java 实现后进先出(LIFO)
- python实现堆栈 后进先出 LIFO
- 向消息队列发送一个消息(FIFO),OSQPost()
- 栈(Stack)——后进先出(LIFO)的数据结构(Data Structures)
- 消息队列是先进先出
- Handler(2)--主线程向自身消息队列发送消息
- Handler(2)--主线程向自身消息队列发送消息
- 进程间通信-Queue 消息队列 先进先出
- 使用JAVA向微软消息队列(MSMQ)发送和接收消息
- 消息队列实现从一个进程向另一个进程发送一个数据块的方法
- 栈--后进先出
- 阻塞双端消息队列 BlockingDeque(先进先出的原则管理)
- Activemq队列已满向消息发送端发送通知
- 向线程发送消息
- 向窗口发送消息
- 向线程发送消息
- idea导入java项目
- Python中冒泡排序:
- MySQL前缀索引和索引选择性
- Linux-理解ARP、网关、路由
- mybatis教程
- 向消息队列发送一个消息(后进先出LIFO),OSQPostFront()
- “==”和“equals”的用法
- QT调用命令行程序
- struts2数据校验
- 高性能IO模型浅析
- linux 系统下安装Kscope代码查看工具
- 手游《六大门派》 武侠MMORPG手机游戏全套源码下载
- mycat实现mysql读写分离实践
- MySQL的btree索引和hash索引的区别