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