getMessageList

getMessageList 方法用于检索消息列表。出于以下两个原因而使用此方法:

销毁某个反应类时,将通知其线程取消队列中所有对该反应类触发的事件。线程将通过使用 getMessageList 检索数据来遍历此队列,并且将目标为此反应类的所有事件都标记为“已被取消”。

特征符
RiCOSResult RiCOSMessageQueue_getMessageList(
   RiCOSMessageQueue *const me, RiCList *l);
参数
me

这是 RiCOSMessageQueue

l

这是队列中的消息列表

返回

RiCOS*.h 文件中定义的 RiCOSResult 对象

示例
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; 
      /* do not care which tasks are waiting */
      msgQInfo.msgListMax = 0;
      msgQInfo.msgPtrList = NULL;
      msgQInfo.msgLenList = NULL;
 
      /* Do not care about message length. The 
         first call will retrieve the numMsgs data 
          member. */
      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;}

反馈