큐로 메시지 큐 구현하기
2015. 6. 10. 12:55ㆍ엘키스공간/엘키스코딩공방
728x90
728x90
서론
메시지 큐 방식은 윈도우 기본 프로시저에서 보내는 형태도 있고,
포트폴리오때 패킷 처리 함수를 돌릴때도 사용했다.
구조는 대충 이런 느낌으로.
큐는 내가 작성한 LinkedListQueue와 CircularQueue로 구현했다.
메시지 큐
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <iostream> #include <Windows.h> #include <process.h> #include <conio.h> #include "MH_CircularQueue.h" #include "MH_LinkedListQueue.h" using namespace std; // 스레드 펑션 unsigned int WINAPI ThreadFunc(void* arg); // 환형 큐로 메시지 큐 전역으로 생성 // MH_CircularQueue<char> messageQueue; // 링크드 리스트 큐로 메시지 큐로 전역으로 생성 MH_LinkListQueue<char> messageQueue; void main(void) { unsigned int threadID = 0; // 스레드 생성 HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, ThreadFunc, &messageQueue, 0, (unsigned*)&threadID); // 예외처리 if(hThread == NULL) { cout<<"Thread Creation Fail"<<endl; return; } cout<<"Thread Creation Sucesse"<<endl; // 메뉴 출력 cout<<"1. Message1 \n2. Message2\n3. Meesage3 \n0. exit"<<endl; // 메시지 루프 while(true) { // 큐에 값 넣기 messageQueue.enQueue(_getch()); } system("pause"); } // 메세지 처리 쓰레드 unsigned int WINAPI ThreadFunc(void* arg) { while(true) { Sleep(1000); // 메시지 큐 비었는지 확인 if(messageQueue.isEmpty() == false) { // 메시지 큐에서 가져오기 switch(messageQueue.deQueue()) { case '1': { cout<<"Excute Message1"<<endl; break; } case '2': { cout<<"Excute Message2"<<endl; break; } case '3': { cout<<"Excute Message3"<<endl; break; } case '0': { cout<<"Exit Program"<<endl; exit(0); } default: { cout<<"Invalid Message"<<endl; break; } } } } } | cs |
728x90
반응형
'엘키스공간 > 엘키스코딩공방' 카테고리의 다른 글
비트 조작 유틸로 만들기 (0) | 2015.07.13 |
---|---|
더블 링크드 리스트 (1) | 2015.06.21 |
싱글 링크드 리스트 (0) | 2015.06.21 |
큐 구현하기 (0) | 2015.06.10 |
[코딩] 스택 구현하기 (1) | 2015.06.10 |
가위바위보 게임 만들기 (0) | 2015.03.24 |
베스킨라빈스 31 게임 (0) | 2015.03.24 |