ACE_Message_Queue의 Iterating 기능 Programming

ACE_Message_Queue는 ACE_Message_Block을 위한 전용 컨테이너 입니다. 제가 알기로는 ACE에는 특정 자료형을 위한 전용 컨테이너는 이거 하나 밖에 없을 겁니다. 그만큼 Message_Block이 중요한 class이고 함께 사용하면 유용한 기능들도 많습니다. 그 중 하나인 Message_Queue에 있는 Message_Block을 꺼내지 않고 iterating하는 기능을 소개합니다.

보통 Queue에 들어있는 element를 iterating 하려면 Queue의 특성상 다 꺼내야 합니다. 하지만 Message_Block의 next()함수를 사용하면 꺼내지 않고도 iterating이 가능합니다.

먼저 일반 Queue처럼 꺼내는 방법 입니다.
ACE_Message_Queue<ACE_NULL_SYNCH> queue;
// 사이즈가 1~10 인 block을 넣음
for (int i=1; i<11; ++i)
{
    ACE_Message_Block* block0 = new ACE_Message_Block(i);
    queue.enqueue_tail(block0);
}
// 10개 들어갔나 확인
ACE_DEBUG((LM_INFO,"Message Count(%d) Bytes(%d)\n", queue.message_count(), queue.message_bytes()));

ACE_Message_Block* block0 = NULL;
// 꺼내서 출력
while(queue.dequeue_head(block0) != -1)
    ACE_DEBUG((LM_INFO,"Message Block Size(%d)\n", block0->size()));
// empty
ACE_DEBUG((LM_INFO,"Message Count(%d)\n", queue.message_count()));

Message_Block의 next() 메소드를 이용한 iterating
ACE_Message_Queue<ACE_NULL_SYNCH> queue;
// 사이즈가 1~10 인 block을 넣음
for (int i=1; i<11; ++i)
{
    ACE_Message_Block* block0 = new ACE_Message_Block(i);
    queue.enqueue_tail(block0);
}
// 10개 들어갔나 확인
ACE_DEBUG((LM_INFO,"Message Count(%d) Bytes(%d)\n", queue.message_count(), queue.message_bytes()));

ACE_Message_Block* block0 = NULL;
// 꺼내지 않고 첫번째 block을 가져옴
queue.peek_dequeue_head(block0);
do
{
    ACE_DEBUG((LM_INFO,"Message Block Size(%d)\n", block0->size()));
} while( (block0 = block0->next()) != NULL );
// 여전히 10개
ACE_DEBUG((LM_INFO,"Message Count(%d)\n", queue.message_count()));

next() 메소드를 cont() 메소드와 혼동 하실수도 있는데,
  • cont() 메소드는 ACE_Message_Block을 링크드 리스트로 구성할 때 사용
  • next() 메소드는 ACE_Message_Queue안에 들어있는 다음 블럭을 구할때 사용
하는 메소드 입니다.

핑백

  • flexible gameserver : ACE에서 우선순위 큐(Priority Queue) 2009-03-26 21:53:16 #

    ... 클래스를 제공하지만 우선순위 큐는 없습니다. 하지만 ACE_Message_Queue를 사용하면 우선순위 큐의 효과를 볼 수 있습니다. ACE_Message_Queue에 대해서는 이 포스팅에서 설명하고 있으니 생략하겠습니다. 일반적인 Enqueue / Dequeue block1 = new ACE_Message_Block(1); block2 = new ACE_ ... more

  • 세상으로 나아가라 : ACE_Message_Queue의 Iterating 기능 Programming 2011-10-07 00:01:03 #

    ... http://javawork.egloos.com/2205744</a><a title="ACE_Message_Queue의 Iterating 기능" href="http://javawork.egloos.com/2205744" name="2205744">ACE_Message_Queue의 Iterating 기능</a> Programmingby 자바워크 2009/01/17 01:45<a href="http://javawork.egloos.com/2205744">j ... more

덧글

댓글 입력 영역