消息队列

来源:互联网 发布:c 编程 猜字小游戏 编辑:程序博客网 时间:2024/05/21 18:08


消息队列

消息队列发送端

#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进程间通信经常使用开发一篇全(消息队列,共享内存,信号)




0 0
原创粉丝点击