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;
}

피드백