#define MAX_MESSAGE_NUMBER 100 #define MAX_MESSAGE_SIZE 128 #define MAX_PROCESS_NAME 32 #include <boost/interprocess/ipc/message_queue.hpp> #include <boost/interprocess/creation_tags.hpp> #include <iostream> using namespace boost::interprocess; class CMessageQ { public: CMessageQ(const char* pName) { m_pMsgQ = NULL; strcpy(m_Name, pName); } ~CMessageQ(void) { Remove(); } public: bool Create() { try{ Remove(); // 메모리에서 제거되면 안되므로 static으로 선언 static message_queue mq(create_only, m_Name, MAX_MESSAGE_NUMBER, MAX_MESSAGE_SIZE); m_pMsgQ = &mq; }catch(interprocess_exception &ex){ std::cout << "MessageQ Create() error : " << ex.what() << std::endl; return false; } return true; } bool Open() { try{ static message_queue mq(open_only, m_Name); m_pMsgQ = &mq; }catch(interprocess_exception &ex){ std::cout << "MessageQ Open() error : " << ex.what() << std::endl; return false; } return true; } size_t Get() { size_t temp; try{ temp = m_pMsgQ->get_num_msg(); return temp; }catch(interprocess_exception &ex){ std::cout << "MessageQ Get() error : " << ex.what() << std::endl; } return 0; } template <typename T> bool Send(T* Data,size_t Size, unsigned int priority = 0) { try{ m_pMsgQ->send(Data, Size, priority); }catch(interprocess_exception &ex){ std::cout << "MessageQ Send() error : " << ex.what() << std::endl; return false; } return true; } template <typename T> bool Recv(T* Data, size_t Size, unsigned int& priority) { size_t recvd_size=0; try{ //m_pMsgQ->receive(Data, Size, recvd_size, priority); m_pMsgQ->receive(Data, MAX_MESSAGE_SIZE, recvd_size, priority); if( Size != recvd_size ) { std::cout << "MessageQ Recv() Size Wrong : " << std::endl; return false; } }catch(interprocess_exception &ex){ std::cout << "MessageQ Recv() error : " << ex.what() << std::endl; return false; } return true; } void Remove() { message_queue::remove(m_Name); } private: char m_Name[MAX_PROCESS_NAME]; // 프로세스 이름 message_queue* m_pMsgQ; // 메시지큐 포인터 };
이렇게 사용하면 될려나 ㅡㅡ; ㅎㅎ