message queue 구현 - not using boost library

Program Lang./C++ 2016. 7. 8. 15:06

boost library interprocess에 message queue가 구현되어 있으나, 공부하는 차원에서 한번 만들어봤다.

소스가 너무 커서 일단 전체 소스는 zip파일 참조


1. 소스트리

.

├── CMakeLists.txt

├── messageQueue.cpp

├── messageQueue.h

├── remove.sh

├── test.cpp

└── types.h


2. message queue header 파일


3. 테스트


네가 만든 메세지 큐를 사용하는 방식은 아래와 같다.


1) 일단 메세지 큐를 연다. (Non Block 의 경우는 Non block open 함수로 연다)

2) 메세지를 보내는 task를 하나 만들고 메세지를 보낸다.

3) 메세지를 받는 task를 하나 만들고 메세지를 받는다.


main 함수도 하나의 task이므로 모든 메세지가 주고 받을 때까지 기다리다가

끝내려면 'x'를 눌러서 나간다.


thread 생성 후에 join을 하기보다는 detach로 작성한 이유는 메세지를 보내고

받는 쪽에서 처리가 안되면 계속 메세지 큐는 보내는 쪽에서 Blocking 상태임으로

모두 detach 시킨다.


이 경우 main 함수를 끝내면 안된다.


네가 구현한 메세지 큐는 메세지 큐 상태를 출력하는데 보내는 thread와 받는 thread의

ID와 현재 주고 받는 메세지 큐 상태를 check할 수 있다.



4. 실행 결과


받는 쪽 thread에서 현재 메세지 큐 상태를 확인하기 위해서 계속 출력하도록 해 봤다



~~~~~~~~~~~~ 중략 ~~~~~~~~~~~~~~~~~~~~~~


name : heesoon.kim, age : 41

--------------------------------------------------

                 index : 0

                    id : 3

          msgQueueName : /mq_test

              senderId : 3074534208

            receiverId : 3066141504

      sendMessageCount : 8

  receivedMessageCount : 8

-------------------------------------------------

name : heesoon.kim, age : 41

--------------------------------------------------

                 index : 0

                    id : 3

          msgQueueName : /mq_test

              senderId : 3074534208

            receiverId : 3066141504

      sendMessageCount : 8

  receivedMessageCount : 9

-------------------------------------------------

name : heesoon.kim, age : 41

--------------------------------------------------

                 index : 0

                    id : 3

          msgQueueName : /mq_test

              senderId : 3074534208

            receiverId : 3066141504

      sendMessageCount : 10

  receivedMessageCount : 10

-------------------------------------------------

x

called ~messageQueue

 

 

 

5. 소스 전체

 

messageQueueTest.zip

 

'Program Lang. > C++' 카테고리의 다른 글

2. mpeg ts pat (program associate table) parser  (0) 2016.07.14
1. mpeg sectoin parser  (0) 2016.07.13
message queue with boost and serialization  (0) 2016.07.12
message queue - with boost lib  (0) 2016.07.11
template과 상속 조합  (0) 2016.07.07
: