boost 进程间通信消息队列传递结构体
sender
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <boost/interprocess/ipc/message_queue.hpp>
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
using namespace boost::interprocess;
struct MyData
{
string name;
int age;
MyData(string _name, int _age) : name(_name), age(_age)
{}
};
int main()
{
try {
//Erase previous message queue
//message_queue::remove("message_queue");
//message_queue::remove
char MessageStr[100] = "Hello World";
//Create a message_queue.
message_queue mq
(open_only //open or create
, "message_queue" //name
);
//Send 100 numbers
MyData data_temp("tom ", 0);
for (int i = 0; i < 4; ++i) {
data_temp.name = data_temp.name + to_string(i);
data_temp.age = i;
//memcpy(MessageStr, to_string(i).c_str(), sizeof(to_string(i).c_str()));
mq.send(&data_temp, sizeof(data_temp), 0);
data_temp.name = "tom ";
}
}
catch (interprocess_exception& ex) {
std::cout << ex.what() << std::endl;
return 1;
}
return 0;
}
receiver
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <boost/interprocess/ipc/message_queue.hpp>
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
using namespace boost::interprocess;
struct MyData
{
string name;
int age;
MyData(string _name, int _age) : name(_name), age(_age)
{}
};
int main()
{
//std::string sTemp;
try {
//Open a message queue.
char MessageStr[100]="Hello World";
message_queue::remove("message_queue");
std::string sTemp = "";
MyData data_temp("", 0);
message_queue mq
(open_or_create //open or create
, "message_queue" //name
, 100 //max message number
, sizeof(data_temp) //max message size
);
unsigned int priority;
message_queue::size_type recvd_size;
//Receive 100 numbers
//std::string sTemp;
//std::string sTemp;
for (int i = 0; i < 60; ++i)
{
mq.receive(&data_temp, sizeof(data_temp), recvd_size, priority);
printf("%s %d\n",data_temp.name.c_str(), data_temp.age);
//printf("%s\n", sTemp);
//printf("I:%d Rec:%d\n",i,number);
int ac = 0;
}
}
catch (interprocess_exception& ex) {
message_queue::remove("message_queue");
std::cout << ex.what() << std::endl;
return 1;
}
//message_queue::remove("message_queue");
return 0;
}
This post is licensed under CC BY 4.0 by the author.