问题标签 [qsharedmemory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
891 浏览

c++ - 观察 QSharedMemory 的变化

我有一个QSharedMemory来防止我的应用程序的两个进程同时运行。进程 A 在启动时将 QSharedMemory 设置为“锁定”。现在我的流程 B 设置了一个值,例如“请回到前台”。

进程 A 是否有一种简单的方法可以观察 QSharedMemory 的变化,即避免实现愚蠢的拉动计时器?

0 投票
1 回答
1326 浏览

c++ - 使用 QSharedMemory 传递结构

我是QT的新手。我已经看到 QT 为共享内存提供的基本示例,但我想使用共享内存共享结构。我怎样才能实现它?

在接收函数中,我在缓冲区中正确获取数据,但我无法将其转换为可验证的 Struct。

0 投票
1 回答
649 浏览

c++ - 在 QSharedMemory 中存储数据

我正在尝试在共享内存中存储四个“双”变量和一个“整数”变量。

QSharedMemory::data()提供一个指向用 . 预留的内存的指针create(int size)。我的问题是:我怎样才能适当地将数据加入并深度复制到共享内存中,以便我可以访问另一个程序上的任何元素以进行读/写?

我看到的唯一类似的事情是将值放在QString. 那是正确的方法吗?

谢谢。

0 投票
0 回答
305 浏览

c++ - Qt C++ 自定义类,用于使用 QSharedMemory 在多个应用程序上复制和粘贴

QT C++ 我可以使用自定义 mime 类型在多个应用程序上进行复制和粘贴吗?

在我问了这个问题之后,我尝试使用 QSharedMemory 制作一个应用程序。

但是当我尝试在 A 和 A' 之间复制和粘贴时

发生无法读取内存。(在单个应用程序中,它完美地工作)

下面是我的结果和代码。

在单个应用程序中:效果很好

在多个应用程序中:无法读取内存

我的自定义课程

复制功能

粘贴功能

如何使用 QSharedMemory 和包含 vector 的自定义类在多个应用程序上复制和粘贴?

0 投票
1 回答
201 浏览

c++ - Qt QSharedMemory 和 QDataStream

我想使用 QSharedMemory 制作共享内存。所以,我正在尝试使用 QDataStream 读/写我的自定义类。但我不知道如何覆盖双指针(float **)。

(我使用双指针的原因是因为opencv cv::Mat,如果有比我想要的更好的方法,请推荐)

和 cpp 文件:

0 投票
1 回答
2293 浏览

c++ - 使用 QSharedMemory 附加现有的共享内存

在应用程序 1(C 代码)中,我创建了一个这样的共享内存:

在应用程序 2(QT)中,我想访问这个 SharedMemory

附加失败“QSharedMemory::attach (shmget): 不存在”“16858191”“/tmp/qipc_sharedmemory_24384b85e5d54b23bd4f84f14de71b10d4801666”

所以我尝试了以下

附加失败“QSharedMemory::attach (shmget): 不存在”“”“/tmp/shmem_prot”

我查看了qsharedmemory_unix.cpp的来源

我认为问题在于 unix_key 未设置,因此 attach() 中的 shmget 将失败。handle() 是私有的,所以我不能调用这个函数来设置 unix_key。

是否可以在不知道共享内存大小/调用 create() 的情况下访问共享内存?

当我尝试调用 create()

将创建一个新的共享内存...

我究竟做错了什么?提前致谢。

0 投票
1 回答
1962 浏览

c++ - QSharedMemory 不会在应用程序崩溃时被删除

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

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

在此处输入图像描述

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

在此处输入图像描述

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

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

0 投票
1 回答
580 浏览

c++ - C++/Qt memcpy 与 QSharedMemory 崩溃

我有一个简单的函数,它使用 Qt 的 (5.5.1) QSharedMemory 类将字符串(uri 链接或文件路径)发送到已经运行的应用程序实例。

它似乎在大多数情况下都能正常工作,但我从用户那里捕获了一个崩溃日志,它在 memcpy 上崩溃了。该函数如下所示:

m_SharedMemory 是类的 QSharedMemory 类型的静态成员。

从日志中,我看到我尝试发送的字符串是一个简单的文件路径,没有特殊字符,而且不太长,只有 150 个字符。

有什么问题,但是我无法用类似的参数重现它?

0 投票
1 回答
642 浏览

qt - 使用共享内存序列化信号/槽 QObjects

我有两个Qt应用程序共享一个内存段。

在此处输入图像描述

我希望能够从 App2 发出信号并从 App1 触发插槽。首先,我需要使用QObject::connect()将 App2 信号链接到 App1 插槽。

有没有连接两个不同Qt进程信号/插槽机制的好方法?我偶然发现了qt-remote-signals库来发送远程信号,它QDataStream用于序列化对象。QSharedMemory使用相同的类。

还是我应该忘记连接任何东西而只是模拟信号/插槽行为?

  1. 从 App2 写入内存段
  2. 每当它从 App1 更改时读取该段(如何知道它何时更新?)
  3. 从 App1 发出自定义信号
  4. 从 App1 触发一个插槽

这听起来现实吗?我是共享内存的新手。

0 投票
2 回答
546 浏览

python - 将列表从 QSharedMemory 复制到 sip.voidptr 的 Pythonic 方式

我正在使用 PyQT5 和 QSharedMemory 类。我正在创建一个可以容纳 6 个 1 字节元素的共享内存。要将这些元素复制到共享内存数组中,我将循环访问 python 列表中的元素,如下所示:

这似乎非常不合 Python 和样板代码。我想知道是否有更合适的方法来实现相同的结果?

使用时

或者:

它将失败并显示错误消息:

用于重现的整个测试代码如下所示: