消息队列
2016-08-05 16:59
274 查看
消息队列
消息队列发送端#include <boost/interprocess/ipc/message_queue.hpp> #include <iostream> #include <vector> #include <QThread> using namespace std; using namespace boost::interprocess; int main(int argc, char *argv[]) { try{ //Erase previous message queue message_queue::remove("message_queue"); //Create a message_queue. message_queue mq (create_only //only create ,"message_queue" //name ,100 //max message number ,sizeof(int) //max message size ); while(1) { for(int i = 0; i < 100; ++i) //Send 100 numbers { mq.send(&i, sizeof(i), 0); std::cout<<"send: "<<i<<endl; } QThread::sleep(10); } } catch(interprocess_exception &ex) { std::cout << ex.what() << std::endl; return 1; } return 0; }
消息队列接收端
#include <boost/interprocess/ipc/message_queue.hpp> #include <iostream> #include <vector> #include <QThread> using namespace boost::interprocess; int main() { try{ //Open a message queue. message_queue mq (open_only //only create ,"message_queue" //name ); unsigned int priority; message_queue::size_type recvd_size; while(1) { for(int i = 0; i < 100; ++i) //Receive 100 numbers { int number; mq.receive(&number, sizeof(number), recvd_size, priority); printf("I:%d Rec:%d\n",i,number); if(number != i || recvd_size != sizeof(number)) return 1; } QThread::sleep(5); } } catch(interprocess_exception &ex) { message_queue::remove("message_queue"); std::cout << ex.what() << std::endl; return 1; } message_queue::remove("message_queue"); return 0; }
整理之后的消息队列
#include <BoostMsg.h> #include <boost/interprocess/ipc/message_queue.hpp> #include <iostream> #include <vector> using namespace boost::interprocess; int CreateMsg(const char* MsgQueName,int MaxQueLen,int MaxMsgLen) { message_queue::remove(MsgQueName); //Create a message_queue. message_queue mq (create_only //only create ,MsgQueName //name ,MaxQueLen //max message number ,MaxMsgLen //max message size ); printf("Boost Msg Created Name:%s QueLen:%d MsgMaxLen:%d \n",MsgQueName,MaxQueLen,MaxMsgLen); return 0; } int OpenMsgToSend(char* BufMsg,const char* MsgQueName,int MsgLen) { try{ //Erase previous message queue //message_queue::remove("message_queue"); //Create a message_queue. message_queue mq (open_only //only create ,MsgQueName //name ); mq.send(BufMsg, MsgLen, 0); } catch(interprocess_exception &ex){ std::cout << ex.what() << std::endl; return 1; } return 0; } int OpenMsgToRec(char* RecivedMsg,const char* MsgQueName,int MaxReceivedLen) { try{ //Open a message queue. message_queue mq (open_only //only create ,MsgQueName //name ); unsigned int priority; message_queue::size_type recvd_size; memset(RecivedMsg,0,MaxReceivedLen); mq.receive(RecivedMsg, MaxReceivedLen, recvd_size, priority); return recvd_size; } catch(interprocess_exception &ex){ message_queue::remove("message_queue"); std::cout << ex.what() << std::endl; return 1; } message_queue::remove("message_queue"); return 0; } 。
Link
boost进程间通信经常使用开发一篇全(消息队列,共享内存,信号)
相关文章推荐
- Redis作为消息队列服务场景应用案例
- 消息队列比较-rabbitmq/kafka/rocketmq/ONS
- WCF4.0新特性体验(9):非破坏性队列消息接收(Non-destructive queue receive )
- Linux环境进程间通信(三)消息队列
- Linux消息队列应用
- RabbitMQ消息队列在PHP下的应用
- 消息队列介绍
- Storm的消息队列接入以及多种方式落地实例代码实现
- 【消息队列】ZMQ概述
- 【消息队列MQ】各类MQ比较
- phpMemcache消息队列类
- Linux进程间通信(IPC)编程实践(五)消息队列实现回射客户/服务器
- 【无中生有】---7---分布式消息队列
- Linux下进程间通信--消息队列
- 分布式消息队列 RocketMQ源码解析:Filtersrv
- linux 下内核中消息队列实现
- 进程间通信(2)消息队列
- 消息队列应用场景
- 【openstack】openstack中的消息队列
- Android多线程Handler、Looper、消息队列