BOOST库 消息队列

直接贴实验代码:

/*******         boost 消息队列          **********/
#if 1  
#include <boost/thread/thread.hpp>
#include <boost/interprocess/ipc/message_queue.hpp>   
#include <iostream>   
#include <vector>   
#include <unistd.h>

using namespace boost::interprocess;  
  


void thread_send() 
{ 
   try{  
      //Erase previous message queue   
      message_queue::remove("message_queue");  
  
      //Create a message_queue.   
      message_queue mq  
         (create_only               //only create   
         ,"message_queue"           //name   
         ,10                       //max message number   
         ,sizeof(int)               //max message size   
         );  
  
      //Send 10 numbers   
      for(int i = 0; i < 10; ++i){  
         mq.send(&i, sizeof(i), 0);  
      }  
   }  
   catch(interprocess_exception &ex){  
      std::cout << ex.what() << std::endl;  
      return;  
   } 

   return;   
} 


void thread_recv() 
{ 
   try{  
      //Open a message queue.   
      message_queue mq  
         (open_only        //only create   
         ,"message_queue"  //name   
         );  
  
      unsigned int priority;  
      message_queue::size_type recvd_size;  
  
      //Receive 10 numbers   
      for(int i = 0; i < 10; ++i){  
         int number_recv;  

         mq.receive(&number_recv, sizeof(int), recvd_size, priority); 
         if(number_recv != i || recvd_size != sizeof(int))  
            return;  
         else
           std::cout << "recv data : " <<  number_recv << std::endl;
      }  
   }  
   catch(interprocess_exception &ex){  
      message_queue::remove("message_queue");  
      std::cout << ex.what() << std::endl;  
      return;  
   }  
   message_queue::remove("message_queue");  
   return;  
}


int main() 
{ 
   boost::thread t_send(thread_send); 
   boost::thread t_recv(thread_recv); 

   t_send.detach(); 
   t_recv.detach(); 

  while(1){

     sleep(3);
     std::cout << " --run--"<< std::endl;  

  }

  return 0;
}

 

 

 

 

 

 

.