WSF操作系统抽象层学习笔记(三)---消息列队
生活随笔
收集整理的這篇文章主要介紹了
WSF操作系统抽象层学习笔记(三)---消息列队
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
消息
WSF的消息服務(wù)用于傳遞消息到對(duì)應(yīng)的事件處理句柄。
實(shí)現(xiàn)機(jī)制和使用方法
消息的發(fā)送
? ? ? ??將消息添加到handleID對(duì)應(yīng)的列隊(duì)中,并給這個(gè)handleID設(shè)置消息隊(duì)列的事件。
//將消息發(fā)送給對(duì)應(yīng)的處理句柄 void WsfMsgSend(wsfHandlerId_t handlerId, void *pMsg) {WSF_TRACE_MSG1("WsfMsgSend handlerId:%u", handlerId);/* 根據(jù)handleId獲取當(dāng)前任務(wù)的msg_queue,然后將消息添加到隊(duì)列中 */WsfMsgEnq(WsfTaskMsgQueue(handlerId), handlerId, pMsg);/* 向?qū)?yīng)的task發(fā)送有列隊(duì)的事件,以保證后續(xù)可以處理改消息 */WsfTaskSetReady(handlerId, WSF_MSG_QUEUE_EVENT); }消息的管理
? ? ? ? 主要進(jìn)行消息的出隊(duì)和如隊(duì)的操作。操作的時(shí)候需要注意消息頭部的管理。入隊(duì)時(shí)需要找到消息的頭部節(jié)點(diǎn),出隊(duì)時(shí)需要將頭部節(jié)點(diǎn)去除后將消息傳遞給用戶。
//將消息添加到消息隊(duì)列 void WsfMsgEnq(wsfQueue_t *pQueue, wsfHandlerId_t handlerId, void *pMsg) {wsfMsg_t *p;WSF_ASSERT(pMsg != NULL);/* 需要找到從消息頭部開始的地方 */p = ((wsfMsg_t *) pMsg) - 1;/* 設(shè)置消息處理的handleId */p->handlerId = handlerId;WsfQueueEnq(pQueue, p); }//從消息隊(duì)列中取出一個(gè)消息 void *WsfMsgDeq(wsfQueue_t *pQueue, wsfHandlerId_t *pHandlerId) {wsfMsg_t *pMsg;if ((pMsg = WsfQueueDeq(pQueue)) != NULL){*pHandlerId = pMsg->handlerId;/* 需要去除消息的頭部 */pMsg++;}return pMsg; }//從消息隊(duì)列中取出一個(gè)消息,但不從列隊(duì)中刪除 void *WsfMsgPeek(wsfQueue_t *pQueue, wsfHandlerId_t *pHandlerId) {wsfMsg_t *pMsg = pQueue->pHead;if (pMsg != NULL){*pHandlerId = pMsg->handlerId;/* 需要去除消息的頭部 */pMsg++;}return pMsg; }?
總結(jié)
以上是生活随笔為你收集整理的WSF操作系统抽象层学习笔记(三)---消息列队的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: html鼠标自定义悬浮窗,【推荐】js+
- 下一篇: SRM系统排名,国内做srm系统的公司