您的位置:首页 > 其它

消息队列

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进程间通信经常使用开发一篇全(消息队列,共享内存,信号)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Boost库