问题标签 [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 投票
7 回答
30816 浏览

c++ - Qt:单实例应用保护的最佳实践

QSingleApplication? QMutex? QSharedMemory? 我正在寻找可以在 Windows、OSX 和 Linux (Ubuntu) 中顺利运行的东西。使用 Qt 4.7.1

0 投票
2 回答
2399 浏览

c++ - QSharedMemory::create() 问题

我正在尝试编写一个SingleApplication只允许程序的一个实例运行的类。我正在使用QSharedMemory

该程序运行良好,除非我使用带有 value 的键"42"。我做错了什么吗?这是未定义的行为吗?

主文件

单应用程序.h

单应用程序.cpp

0 投票
1 回答
335 浏览

qt - 为什么 QShared Memory 创建大小和返回的 size() 不同

我有一个疑问QSharedMemory

如果我创建一个共享内存并且它的大小小于 4096,则 size() 函数返回 4096。

如果创建的大小大于 4096,则返回 4096+创建的大小。

例如:

如何获得正确的尺寸?

我正在使用 Windows 7 32 位操作系统

0 投票
0 回答
457 浏览

python - 如何通过 Python 访问共享内存类型部分

我尝试让 Python 应用程序从共享内存类型部分读取数据。共享内存的位置是\Sessions\1\BaseNamedObjects\ObjectName

我需要使用 mmap 来阅读这个吗?如果是,我怎样才能打开这个共享内存?喜欢open("\Sessions\1\BaseNamedObjects\ObjectName", "r+b")

我试过这个,但它报告了一个无效的论点。

0 投票
1 回答
203 浏览

qt - Q共享内存用于外部运行的进程?

我有一个调用外部可执行文件的 QApplication。此可执行文件将继续无限运行,通过标准输出将数据传递给此 QApplication,除非用户从控制台运行它手动退出。此进程在运行时不会等待标准输入(它是一个简单的 c++ 代码,作为具有 while 循环的可执行文件运行)。

我希望能够通过将某种形式的信号从 QApplication 发送到外部进程来在运行时修改此可执行文件的行为。我阅读了有关 QT 的 IPC 的信息,我认为 QSharedMemory 是实现这一目标的最简单方法。我不能使用任何类型的管道等,因为该过程不等待标准输入。

是否可能存在由 QApplication 共享的 QSharedMemory 以及在外部运行的不是 QT 应用程序的进程。如果是的话,有没有人可以指出我的例子;我试图找到一些但找不到。如果不是,在我的特定情况下还有哪些其他选项可能起作用?

提前致谢

0 投票
1 回答
878 浏览

struct - Qt4:如何通过 QSharedMemory 在结构内发送 QString

我有一个结构

我需要在 QShareMemory 的帮助下将它发送到另一个线程。我读到你不能这样做,因为 QString 里面包含指针。还有其他方法吗?

0 投票
2 回答
442 浏览

c++ - 没有 Qt 应用程序的 QsharedMemory

我有一个应用程序 A,我想与应用程序 B 共享一些信息。应用程序 A 每约 150 毫秒写入信息。应用程序 B 随时读取信息。

我搜QSharedMemory了一下,看起来不错,但是应用B不会是我公司开发的,所以不能选择编程语言。

QSharedMemory个好主意吗?我怎样才能做到这一点 ?

0 投票
1 回答
374 浏览

c++ - QT:QSharedMemory 正在使用相同的键创建多个段

我正在编写一个应用程序,用于学习目的,它由两个可执行文件组成。除其他外,每个可执行文件创建自己的共享内存段(使用不同的密钥),之后可执行文件 A 尝试使用 B 的密钥创建一个段,而 B 对 A 的密钥执行相同操作(这样做的目的是针对每个可执行文件检查另一个是否仍在运行。我知道这可能不是完成此任务的最佳方法,但我要求您不要专注于这个事实)。如果任何一个程序成功地使用另一个程序的密钥创建了一个段,它就会假设另一个程序没有运行并相应地采取行动。

发生的问题是,当 B 检查 A 时,这可以正常工作。但是当 A 检查 B 时,它可以使用 B 已经创建的相同键创建一个段。我很确定我检查了所有可能的竞争条件,而且我也很确定这两个段同时存在并具有相同的键(两个 QSharedMemory 使用此键创建调用都返回 true)。事实上,只是为了咯咯笑,我已经将 create 调用放在循环中,只要循环继续,它就可以使用相同的键继续创建段。我尝试直接在构造函数中传递密钥,使用 setKey() 并使用 setNativeKey() 并且没有工作。

如前所述,真正令我难以置信的是,同样的方法适用于 B 检查 A,但反之则不行。

我不知道为什么会这样?密钥是否必须遵循任何标准?QSharedMemory 在线程/信号/方法中使用时是否有限制或特定行为?

A 的代码片段(使用信号调用方法 - 不起作用):

B 的代码片段(方法也称为使用信号 - WORKS)

0 投票
3 回答
787 浏览

c++ - QDatastream 太慢?

我正在尝试使用 QSharedmemory 在两个进程之间传递多个图像(实际上是一个视频)。目前我正在序列化 QImages 的 QVector 并将其复制到内存中。这可行,但序列化步骤需要大约 99% 的时间。我怎样才能以独立于平台的方式更快地做到这一点?

我的发送代码:

0 投票
0 回答
409 浏览

c++ - Qt/C++ 从不同的程序访问映射的内存文件

我希望为 Qt 应用程序(可以使用任何 c++ 方法或库)实现一种方法来访问/查找由 Matlab 进程创建的映射内存文件。我已经阅读了几个关于如何在特定环境中执行共享内存的示例(即在 Matlab 或 Qt 或 VS 中创建的 2 个进程),但没有人谈论如何从另一个程序中查找映射文件。有没有办法做到这一点?

这是我映射文件的 Matlab 脚本:

我对从 Qt 写入映射文件并不感兴趣,现在我只是想知道它是否存在,然后可能在将来写入它。我想在 Qt 中尝试的唯一一件事就是查看文件是否存在,但我的尝试从根本上是有缺陷的,因为据我所知,我想知道文件是否被映射(寻找内存地址?)而不是它是否存在在硬盘上。

有没有人尝试过这样做?谁能指出我正确的方向?