【QT】QSharedMemory 打包后exe只运行一个实例

只运行一个exe

在 Qt 框架中,QSharedMemory 类用于在多个进程之间共享内存。这通常用于同步操作或实现进程间通信(IPC)。当创建一个 QSharedMemory 对象并指定一个键(在这个例子中是 "onlyOne")时,正在尝试访问或创建一个与该键相关联的共享内存段。

cpp 复制代码
	#include <qsharedmemory.h>
    // 只运行一个exe
    QSharedMemory shared("onlyOne");

	// 尝试连接到已存在的共享内存  
    if (shared.attach())
    {
    	// 已经存在一个运行的实例
        return 0;
    }
    shared.create(1);
创建共享内存
cpp 复制代码
QSharedMemory shared("onlyOne");  
if (!shared.create(1024)) { // 假设我们想要1024字节的共享内存  
    qDebug() << "Unable to create shared memory segment.";  
    return;  
}
连接到已存在的共享内存
cpp 复制代码
QSharedMemory shared("onlyOne");  
if (!shared.attach()) { // 尝试连接到已存在的共享内存  
    qDebug() << "Unable to attach to shared memory segment.";  
    return;  
}
读写共享内存

使用 lock() 和 unlock() 方法来确保在读写共享内存时没有其他进程同时进行这些操作。使用 data() 方法获取一个指向共享内存数据的指针。

cpp 复制代码
	if (shared.lock()) {  
    char *to = static_cast<char*>(shared.data());  
    const char message[] = "Hello, world!";  
    std::copy(message, message + sizeof(message) - 1, to); // 注意不要越界  
    shared.unlock();  
}
删除共享内存

当不再需要共享内存段时,可以使用 detach() 方法断开连接(如果之前已经连接了),并使用 remove() 方法删除它。

cpp 复制代码
shared.detach(); // 如果之前连接了  
shared.remove(); // 删除共享内存段
相关推荐
边境悍匪14 分钟前
蜗牛学苑 Java 智能体学习 Day45|Knife4j+SpringBoot3、书城项目整合 MyBatis 思维导图复盘
java·开发语言·vue.js·学习·spring
我的xiaodoujiao15 分钟前
Django 基础知识详细图文教程 9-Django 模板引擎 2
开发语言·数据库·后端·django
菜鸟~noob23318 分钟前
【太空电子战】从CCS到Meadowlands:反通信系统的二十年演进史【含matlab代码】
开发语言·matlab
蓝速科技31 分钟前
商用复杂环境翻译机耐用性选型指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
江湖人称菠萝包33 分钟前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter10-Data Visualization
笔记·qt·qt5
starzy19901 小时前
Flink Sliding Window 详解及代码实现:从窗口重叠到状态爆炸防控
运维·数据库·flink
quantdash_cc1 小时前
量化策略为什么需要实时行情数据?从信号产生到交易决策的时间差说起
开发语言·python·数据分析·量化交易·股票数据·quantdash
jnrjian2 小时前
DRG-50857 ORA-30576 drixmd.PurgeKGL CTXSYS
数据库·oracle
志栋智能3 小时前
集成是关键:让巡检超自动化融入现有工具链
运维·服务器·数据库·架构·自动化
IvorySQL3 小时前
PostgreSQL 日报|逻辑解码竞态条件修复(9 月 20 日)
数据库·人工智能·postgresql