boost::interprocess::message_queue 基础类库IPC进程间通信。

news/2025/2/19 14:56:17/

直接提关键点:

1、接收消息时必须加上超时时间

2、它是基于共享内存及命名管道实现的

3、必须确保写入消息队列的消息是正常的

4、它不是线程安全的,确保没有并行操作

5、其它进程打开后,无法关闭它创建的消息队列(因为操作系统是按照引用技术管理共享内存及命名管道的)

6、如果出现异常,请确保这种紧急时刻,R/W-IPC的所有操作必须在退出进程前完成

XXDD:

IPC、命名管道式最大的问题是主进程挂了无法立即回收,除非所有进程都关闭了它,但潜在问题是相对容易出现多进程死锁问题,若用作同步间的消息队列且处理不当的话。

Windows下使用MMF、Named Pipe 技术,Linux 使用SHM技术,作为简单可靠的IPC间通信建议使用SOCKET的接口来实现,例:Unix Socket?

创建消息队列:

boost::interprocess::permissions permissions;
permissions.set_unrestricted(); // 设置为允许所有者读写,允许组成员读取
boost::interprocess::message_queue mq(boost::interprocess::create_only, name, max_queue_message_count, max_message_bytes_size, permissions);

set_unrestricted() 函数设置为其他人可读写,Linux 等价于权限 0666。

打开消息队列:

    // 创建命名管道boost::interprocess::message_queue::remove("my_named_pipe");  // 确保命名管道不存在boost::interprocess::message_queue mq(boost::interprocess::open_only, "my_named_pipe");// 写入数据int data_to_send = 42;mq.send(&data_to_send, sizeof(data_to_send), 0);// 读取数据unsigned int priority;int received_data;size_t recvd_size;mq.receive(&received_data, sizeof(received_data), recvd_size, priority);// 关闭命名管道boost::interprocess::message_queue::remove("my_named_pipe");

注意:构造消息队列时可能发生SEH结构化异常处理问题,所以注意自行try-catch进行捕获处理,不推荐使用该方法进行操作,因为非常鸡肋。


http://www.ppmy.cn/news/1213155.html

相关文章

7.运算符

目录 一.算数运算符 1、算术运算符 2、比较运算符 1、等号()用来判断数字、字符串和表达式是否相等。 2、安全等于运算符(<>) 3、不等于运算符(<>或者!) 4、小于或等于运算符(<) 5、小于运算符(<) 6、IS NULL(IS NULL)&#xff0c;IS NOT NULL 运算…

Java Web——前端HTML入门

目录 HTML&CSS3&JavaScript简述 1. HTML概念 2. 超文本 3. 标记语言 4. HTML基础结构 5. HTML基础词汇 6. HTML语法规则 7. VS Code 推荐使用的插件 8. 在线帮助文档 HTML&CSS3&JavaScript简述 HTML 主要用于网页主体结构的搭建&#xff0c;像一个毛坯…

基于SpringBoot+Vue的在线学习平台系统

基于SpringBootVue的在线学习平台系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 主页 用户界面 登录界面 管理员界面 摘要 本文设计并实现了一套基于Spri…

有源RS低通滤波

常用的滤波电路有无源滤波和有源滤波两大类。若滤波电路元件仅由无源元件&#xff08;电阻、电容、电感&#xff09;组成&#xff0c;则称为无源滤波电路。无源滤波的主要形式有电容滤波、电感滤波和复式滤波(包括倒L型、LC滤波、LCπ型滤波和RCπ型滤波等)。若滤波电路不仅有无…

[工业自动化-16]:西门子S7-15xxx编程 - 软件编程 - 西门子仿真软件PLCSIM

目录 前言&#xff1a; 一、PLCSIM仿真软件 1.1 PLCSIM仿真软件基础版&#xff08;内嵌&#xff09; 1.2 PLCSIM仿真软件与PLCSIM仿真软件高级版的区别&#xff1f; 1.3 PLCSIM使用 前言&#xff1a; PLC集成开发环境是运行在Host主机上&#xff0c;Host主机与PLC可以通过…

Ubuntu18.04.6安装qt5.7.1(超级详细教程)

目录 1、下载对应Linux版本的qt 2、安装完qt&#xff0c;可能也要安装下对应的编译工具 1、下载对应Linux版本的qt &#xff08;1&#xff09;准备安装的是qt5.7.1&#xff1a;qt-opensource-linux-x64-5.7.1.run &#xff08;2&#xff09;在虚拟机进入存放qt安装包的目录…

c语言:用指针解决有关字符串等问题

题目1&#xff1a;将一个字符串str的内容颠倒过来&#xff0c;并输出。 数据范围&#xff1a;1≤len(str)≤10000 代码和思路&#xff1a; #include <stdio.h> #include<string.h> int main() {char str1[10000];gets(str1);//读取字符串内容char* p&str1[…

[vim]Python编写插件学习笔记2 - 分离

0 环境 Windows 11 22H2gVim82 (D:/ProgramFiles/Vim)Python311 (D:/ProgramFiles/Python311)Vundle v0.10.2 阅读本文前&#xff0c;需要先了解前文: 《[vim]Python 编写插件学习笔记1 - 开始》 1 Python 与 vimscript 分离 前文编写 vim 插件的方式&#xff0c;是将 Pyt…