getMessageList

getMessageList 方法會擷取訊息的清單。 基於兩點原因,建立此方法:

當回應類別毀損時,它會通知其執行緒,取消佇列中針對該回應類別觸發的所有事件。 執行緒會使用 getMessageList 來對佇列進行反覆運算,以擷取資料,並將以回應類別為目標的所有事件標記為已取消。

簽章
RiCOSResult RiCOSMessageQueue_getMessageList(
   RiCOSMessageQueue *const me, RiCList *l);
參數
me

RiCOSMessageQueue

l

佇列中的訊息清單

傳回

RiCOSResult 物件,如 RiCOS*.h 檔案所定義

範例
RiCOSResult RiCOSMessageQueue_getMessageList(
   RiCOSMessageQueue * const me, RiCList * l)
{
   RiCList_removeAll(l);

   if (me == NULL) return 0;
   
   if (!RiCOSMessageQueue_isEmpty(me)) {
      MSG_Q_INFO msgQInfo;

      if (noData != me->m_State) {
         RiCList_addTail(l,me->pmessage);
      }
      msgQInfo.taskIdListMax = 0;
      msgQInfo.taskIdList = NULL; 
      /* 不關心哪些作業正在等待 */
      msgQInfo.msgListMax = 0;
      msgQInfo.msgPtrList = NULL;
      msgQInfo.msgLenList = NULL;
 
      /* 不關心訊息長度。第一個呼叫將擷取 numMsgs 資料
          成員。 */
      if (OK == msgQInfoGet(me->hVxMQ, &msgQInfo)) {
         if (msgQInfo.numMsgs > 0) {
            int numMsgs = msgQInfo.numMsgs;
            msgQInfo.msgListMax = numMsgs;
            msgQInfo.msgPtrList = malloc(
               (numMsgs+1)*sizeof(void*));
            if (OK == msgQInfoGet(me->hVxMQ,&msgQInfo)) {
               void *m;
               int i;
               for (i = 0; i < numMsgs; i++) {
                  m = *(void **)msgQInfo.msgPtrList[i];
                  RiCList_addTail(l,m);
               }
            }
            free(msgQInfo.msgPtrList);
         }
      }
   }
   return 1;}

回饋