应用程序崩溃时 QSharedMemory 不会被删除

2024-03-27

我正在使用实现一个应用程序Qt C++我用过的地方QSharedMemory限制应用程序的多个实例。相关代码段在main.cpp如下,

QSharedMemory sharedMemory;
sharedMemory.setKey(SM_INSTANCE_KEY);

if (!sharedMemory.create(1))
{
    QMessageBox::warning(0, "Console", "An instance of this application is already running!" );
    exit(0); /* Exit, already a process is running */
}

打开应用程序时,我可以看到已为我的应用程序创建了共享内存。 (shmid7045192,size 1B)

到目前为止,一切都很好。当我的应用程序由于某种原因崩溃时就会出现问题。崩溃时,共享内存没有被清除,所以我无法再打开应用程序。当它崩溃时,附加的应用程序计数变为0,但共享内存不会被删除。相关截图如下

据我了解,由于共享内存的状态未标记为dest与其他共享内存一样,即使没有任何附加进程,它也不会被删除。

所以,我的问题是有没有办法将共享内存的状态标记为dest ?


Quoting QSharedMemory文档:

使用此类时,请注意以下平台差异:

Windows:QSharedMemory 不“拥有”共享内存段。当所有拥有 QSharedMemory 实例的线程或进程 连接到特定共享内存段的已损坏 他们的 QSharedMemory 实例或退出时,Windows 内核释放 自动共享内存段。

Unix:QSharedMemory“拥有”共享内存段。当最后一个线程或进程附加了 QSharedMemory 实例时 到特定的共享内存段通过以下方式与该段分离 销毁其 QSharedMemory 实例,Unix 内核释放 共享内存段。但是如果最后一个线程或进程崩溃了 不运行 QSharedMemory 析构函数,共享内存 部分在崩溃中幸存下来。

HP-UX:每个进程只允许对共享内存段进行一次附加。这意味着 QSharedMemory 不应该跨域使用 HP-UX 中同一进程中的多个线程。

几年前我在 Linux 上添加了同样的问题,我们通过执行以下步骤解决了该问题:

// Pseudo code
if (create_share_memory() == failed)
{
    // The failure may be caused by the shm already existing
    attach()
    detach() // This should delete the shm if no process use it
    if (create_share_memory() == failed)
    {
       // We really cannot create the share memory, report the error
       return failed
    }
}
return ok
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用程序崩溃时 QSharedMemory 不会被删除 的相关文章

  • 如何使用movntdqa避免缓存污染?

    我正在尝试编写一个 memcpy 函数 该函数不会将源内存加载到 CPU 缓存中 目的是避免缓存污染 下面的 memcpy 函数可以工作 但会像标准 memcpy 一样污染缓存 我正在使用带有 Visual C 2008 Express 的
  • WPF MVVM将DataTable绑定到DataGrid不显示数据

    我有一个简单的控件 其中包含一个 DataGrid 其中 ItemsSource 绑定到 DataTable 当我填充 DataTable 时 我可以看到 DataGrid 中添加了行 但没有显示任何数据 我没有为此 DataGrid 使用
  • Code First - 实体框架 - 如何公开外键

    我有以下数据对象 public class Customer System Data Entity ModelConfiguration EntityTypeConfiguration
  • 在 C 程序中追踪数组越界访问/写入的推荐方法

    考虑用 C 语言编写一些不太明显的算法的实现 例如 让它成为递归快速排序 我在 K N King 的 C 编程 现代方法 第二版 书中找到了它 可以从here http knking com books c2 programs qsort
  • c#Registry to XML无效字符问题

    我在尝试从注册表创建 XML 文件时遇到问题 在我的笔记本电脑 W7 64b 上它工作正常 生成了 xml 文件 但在另一台计算机 Xp 32b 上抛出异常 System ArgumentException 十六进制值 0x00 是无效字符
  • 从空白启动时 VSTO 功能区不显示解决方案

    如果我从 文件 新建项目 菜单创建一个新的 Excel 2013 和 2016 VSTO 加载项 项目 然后单击 项目 添加新项目 gt 功能区 可视化设计器 则一切正常 我启动了应用程序 我的功能区显示在 Excel 中 但是 如果我首先
  • popen2()在c中如何工作?

    我尝试使用管道 叉子和 dup 在我的程序中执行 md5sume 命令 我发现总和代码运行成功 但我无法理解某些代码行 这是我的代码 int infp outfp char buf 128 if popen2 md5sum infp out
  • Xamarin 无法从异步获取实例

    我编写了一个通过蓝牙连接到 ESP32 的 Xamarin Forms 应用程序 现在我想从 MainPage xaml 页面的 CustomControl JoystickControl 获取值 我已经这样尝试过了 MainPage xa
  • 标准头文件中的 C 编译器错误 - 未定义的 C++ 定义

    我正在尝试编译 C 程序 但收到许多错误 这些错误是在标准 C 头文件 inttypes h stdio h stat h 等 中遇到的 错误的来源是以下未定义的常量 BEGIN DECLS END DECLS BEGIN NAMESPAC
  • Parallel.For 和 Break() 误解?

    我正在研究 For 循环中的并行性中断 看完之后this http tipsandtricks runicsoft com CSharp ParallelClass html and this http reedcopsey com 201
  • 专家 C#/.Net/WPF 开发人员应该了解哪些知识? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 无论表单上的焦点控件如何,如何捕获 Keys.F1?

    我使用了 KeyDown 事件和一些简单的代码 例如if e KeyCode Keys F1 捕获在表单上按下 F1 但如果表单上有一些文本框 或者表单上有一些带有 Dock Fill 的电子表格 则上面的代码将毫无用处并且不执行任何操作
  • 选择要重写哪个基类的方法

    鉴于以下情况 class Observer public virtual void Observe Parameter p 0 template
  • 在同一条线上铸造两次

    我在项目中看到了这段代码 b的类型是void void b int a int unsigned long b 这条线毫无意义吗 我的意思是 这与a int b在所有情况下 这可能会避免 64 位 Unix 系统上的编译器警告unsigne
  • 在 C# 中将 ulong 映射到 long ?

    我正在尝试将 ulong 映射到 long 反之亦然 将 uint 映射到 int 反之亦然 如下所示 为了将值保存在具有签名类型的 MS SQL 数据库中仅限整数和大整数 我这样做是因为我必须检查 在数据库中 一个数字 uint ulon
  • 什么是多重重继承?

    我将以下称为 多重重新继承 直接继承一个类一次 并通过继承其一个或多个后代来间接继承一次或多次 通过继承一个类的两个或多个后代来间接继承一个类两次或多次 我想知道它是否存在以及如何明确访问嵌入的子对象 1 Professional C 2n
  • 父窗体中的居中消息框[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以在 net 2 0中将MessageBox居中于父窗体中 我在 C 中确实需要这个并发现中心消息框 C http bytes com topic c sharp answers 26712
  • jquery ajax“发布”调用

    我是 jQuery 和 Ajax 的新手 并且在 发布 方面遇到问题 我正在使用 jQuery Ajax post 调用将数据保存到数据库 当我尝试保存数据时 它将 null 传递给我的 C 方法 jQuery 看起来像这样 functio
  • 如果未返回,则在一段时间后终止线程

    我有一个线程从网络或串行端口获取一些数据 如果 5 秒内没有收到数据 则线程必须终止 或返回 false 换句话说 如果线程运行时间超过 5 秒 则必须停止 我用 C 编写 但任何 NET 语言都可以 有两种方法 1 封装超时 从网络或串行
  • 使用 wmi 获取活动会话(Win32_LogonSession 还返回非活动/旧会话)

    有没有办法只显示 wmi 的活动会话 问题是 Win32 LogonSession 还显示不活动 断开连接的会话 ManagementScope scope new ManagementScope ManagementPath Defaul

随机推荐

  • iphone如何通过Xcode拍照后进入图片库

    大家好 我正在实施以下代码来通过我的应用程序拍照 UIApplication sharedApplication keyWindow setRootViewController picker picker sourceType UIImag
  • 找不到模块 create-react-app/script/start.js

    我的程序结构发生了一些变化 由于其复杂性 我无法准确指出问题所在 自从我的应用程序崩溃并且不再工作以来 我尝试了不同的方法 例如删除节点模块包并重新安装它们 但仍然无法工作 每当我尝试跑步时npm 启动我收到以下错误 below is my
  • 使用密码保护关闭的工作簿

    我已经搜索过 但没有找到在关闭的工作簿上添加外部密码的方法 假设我已经关闭了名为 Sample xlm 的工作簿 并且我正在打开一个名为 Test xlm 的工作簿 是否有代码可以让我在 Sample xlsm 上设置密码 我的意思是外部密
  • 空状态页面和导航器问题?

    我想实施空状态页 https material io design communication empty states html content在 Flutter 应用程序中 当新闻源为空时 当提要中没有活动时 我想显示 没有活动 当数据
  • 如何将服务变量与组件 Angular 2 绑定?

    我有一个变量 public tick number 在服务中 该服务注入了另一个服务计时器 它的启动方式如下 class Service constructor public timer TimerService public sendSm
  • Python 和类似字典的对象

    我需要一个用于字典的 python 3 1 深度更新函数 该函数将递归更新父字典内的子字典 但我认为 将来 我的函数可能必须处理行为类似于字典但实际上并非如此的对象 此外我想避免使用isinstance and type 因为它们被认为是不
  • 无法运行 React-Native UIExplorer 示例项目

    我一直在尝试在 Windows 上运行 UIExplorer 项目 我收到以下错误 make D react native ReactAndroid build tmp buildReactNdkLib local armeabi v7a
  • Gunicorn + nginx:通过套接字还是代理服务器?

    我见过两种使用 Gunicorn 和 nginx 托管 django 应用程序的策略 一种策略是在网络端口上运行 Gunicorn 例如 来自goodcode https goodcode io articles django nginx
  • jQuery TouchSwipe 插件不适用于链接?

    我正在使用 jQuery TouchSwipe 插件 它在 div 上工作得很好 但在链接上根本不起作用 我想要它 因此如果您点击或单击链接 您将获得默认的链接行为 但是如果你滑动 我希望 javascript 滑动能够像元素是 div 一
  • Java 相当于 .NET Action 和 Func 等[重复]

    这个问题在这里已经有答案了 Java 中是否有标准的通用 回调 或 函数 方法 类型 例如System Action
  • ASP.NET 网站项目何时重新编译?

    As Maurico https stackoverflow com users 21239 mauricio scheffer and codeka https stackoverflow com users 241462 codeka首
  • 如何使用 Ecto 的时间戳向现有表添加时间戳?

    Since inserted at and updated at不可能是null这是行不通的 def change do alter table channels do timestamps end end Postgrex Error E
  • 在 Outlook 2013 中调用功能区按钮

    我们有一个 Outlook 插件 我们需要以编程方式取消任务项检查器窗口中的任务分配 就像取消分配按钮一样 人们会认为调用TaskItem CancelResponseState 可能会起作用 虽然它确实取消了分配 但它也使任务处于不可分配
  • 使用 RequestAnimationFrame 实现准确计时

    到目前为止 我还没有找到很多关于这个主题的文档 我的总体感觉是 在为浏览器实现动画时 最好使用 RequestAnimationFrame 而不是 bog 标准 JavaScript 计时器 我的理解是计时器不可靠 并且它们的分辨率在不同浏
  • Windows 8 Phone - 访问 NFC 读卡器?

    简短的问题 我可以使用支持 NFC 的 Windows Phone 8 读取信用卡信息吗 长问题 NFC 与信用卡如何工作 卡 或具有钱包功能的手机 通过 NFC 接收请求并以某种标准化格式回复明文信用卡信息 那么 钱包选项在广播信用卡信息
  • 传送仅公开 C api 的 C++ dll

    我正在编写一个软件 其 API 仅为 C 语言 因为很容易将 C 代码与其他软件 客户端链接起来 然而 实际的程序代码是用 C 完成的 使用所有常见的 C 功能 如异常 STL 等 导出的 API 标头本身将用纯 C 编写 其中export
  • 如何使用 pandas tz_convert 转换为多个不同时区

    我有一些数据如下所示hour以世界标准时间 UTC 表示 我想创建一个名为的新列local hour基于time zone 我怎样才能做到这一点 好像是熊猫的tz convert不允许列或 pandas 系列作为输入tz争论 Create
  • Rails ActionController::Metal 的实际作用是什么

    我想了解一下Rails ActionController 金属控制器 我读过相关内容here http api rubyonrails org classes ActionController Metal html但不完全理解 它用于构建
  • 对 DataGrid 组进行排序

    我有一个非常基本的DataGrid以及一些测试数据 数据作为ObservableCollection
  • 应用程序崩溃时 QSharedMemory 不会被删除

    我正在使用实现一个应用程序Qt C 我用过的地方QSharedMemory限制应用程序的多个实例 相关代码段在main cpp如下 QSharedMemory sharedMemory sharedMemory setKey SM INST