类
QSharedMemory
提供了对共享内存段的访问。更多…摘要#
方法#
def
__init__()
def
attach()
def
constData()
def
create()
def
detach()
def
error()
def
errorString()
def
isAttached()
def
key()
def
lock()
定义
nativeKey()
定义
setKey()
定义
size()
定义
unlock()
静态函数#
注意
该文档可能包含从 C++ 自动转换为 Python 的代码片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,您也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来通知我们
详细说明#
QSharedMemory
通过多个线程和进程提供了访问 共享内存段 的功能。共享内存段通过QNativeIpcKey
表示的键来识别。可以通过使用 platformSafeKey() 以跨平台方式创建键。一个
QSharedMemory
对象必须create()
段落并指定段的大小。其他所有进程只需attach()
到已存在的段。在完成这些操作后,应用程序可以调用data()
获取数据指针。为了支持非原子操作,
QSharedMemory
提供了获取独占访问的 API:您可以在从共享内存中读取或写入之前使用lock()
锁定共享内存,但记得在使用完毕后使用unlock()
释放锁。默认情况下,当最后一个实例从段中
detached
并且没有对段的引用时,QSharedMemory
自动销毁共享内存段。有关密钥类型、平台特定限制以及与旧版或非Qt应用程序的互操作性的详细信息,请参阅本地IPC密钥文档。这包括适用于Apple平台沙盒应用的 重要信息,包括通过Apple App Store获得的所有应用。
另请参阅
常量
描述
QSharedMemoryReadOnly
共享内存段为只读。不允许写入共享内存段。尝试使用ReadOnly创建的共享内存段写入将导致程序终止。
QSharedMemoryReadWrite
允许读取和写入共享内存段。
常量
描述
QSharedMemoryNoError
没有出现错误。
QSharedMemoryPermissionDenied
操作失败,因为调用者没有所需权限。
QSharedMemoryInvalidSize
创建操作失败,因为请求的大小无效。
QSharedMemoryKeyError
操作失败,因为键无效。
QSharedMemoryAlreadyExists
创建操作失败,因为在指定的键上已经存在共享内存段。
QSharedMemoryNotFound
附加操作失败,因为指定的键找不到共享内存段。
QSharedMemoryLockError
尝试锁定共享内存段失败,因为创建或附加失败并返回了false,或因为
acquire()
中发生了系统错误。QSharedMemoryOutOfResources
创建操作失败,因为没有足够的内存来填充请求。
QSharedMemory未知错误
发生了一些事情,情况很糟糕。
- 参数:
key –
QNativeIpcKey
parent –
QObject
这是一个重载函数。
使用指定的
parent
和密钥key
构造一个共享内存对象。因为其密钥已设置,可以调用其create()
和attach()
函数。- __init__(key[, parent=None])
- 参数:
key – str
parent –
QObject
使用指定的
parent
和遗留密钥key
构造一个共享内存对象。因为其密钥已设置,可以调用其create()
和attach()
函数。- __init__([parent=None])
- 参数:
parent –
QObject
此函数重载了
QSharedMemory()
。使用给定的
parent
构造共享内存对象。共享内存对象的密钥不是由构造函数设置的,因此共享内存对象没有附加底层共享内存段。在使用setNativeKey()
方法设置密钥之前,不能使用create()
或attach()
方法。另请参阅
- 参数:
mode –
AccessMode
- 返回类型:
bool
尝试将进程附加到由构造函数或
setNativeKey()
调用提供的密钥标识的共享内存段。默认访问mode
是ReadWrite
。它也可以是ReadOnly
。如果附加操作成功,则返回true
。如果返回 false,调用error()
方法以确定发生的错误。在附加共享内存段后,可以通过调用data()
获取共享内存的指针。另请参阅
- 返回类型:
void
如果已附加共享内存段,则返回共享内存段内容的const指针。否则返回NULL。此函数返回的值将在发生
detach
之前保持不变,因此可以安全地存储此指针。如果内存操作不是原子的,请在读取或写入之前使用
lock()
锁定共享内存,但请记住使用unlock()
释放锁。- 参数:
size – int
mode –
AccessMode
- 返回类型:
bool
创建一个大小为
size
字节的共享内存段,使用构建函数的键或使用setNativeKey()
设置的键,然后以给定的访问mode
连接到新的共享内存段并返回true
。如果以该键标识的共享内存段已存在,则不执行附加操作并返回false
。当返回值为false
时,调用error()
确定发生哪个错误。另请参阅
- 返回类型:
bool
从共享内存段断开进程。如果是最后一个连接到共享内存段的进程,则系统将释放共享内存段,即销毁其内容。如果成功断开共享内存段,函数返回
true
。如果返回false
,通常意味着段未附加,或者被其他进程锁定。另请参阅
- 返回类型:
返回一个值,表示是否发生错误,如果发生了错误,指出是哪个错误。
另请参阅
- 返回类型:
str
返回最后一次发生的错误的文本描述。如果
error()
返回一个error value
,调用此函数以获取描述错误的文本字符串。另请参阅
- 返回类型:
bool
如果此进程连接到共享内存段,则返回
true
。- 参数:
type –
Type
- 返回类型:
bool
- 返回类型:
str
返回分配给此共享内存的旧式密钥(通过
setKey()
方法设置),如果没有分配密钥或段使用nativeKey()
,则返回 null 密钥。密钥是 Qt 应用程序用于识别共享内存段的标识符。您可以通过调用
nativeKey()
来找到操作系统使用的本地(平台特定)键。另请参阅
- 参数:
key – str
type –
Type
- 返回类型:
- 返回类型:
bool
这是一个信号量,用于锁定该进程对共享内存段的访问,并返回
true
。如果另一个进程已经锁定了该段,则该函数将阻塞,直到锁定被释放。然后它获取锁定并返回true
。如果该函数返回false
,表示你忽略了来自create()
或attach()
的错误,或者使用setNativeKey()
设置了密钥,或者因为未知系统错误而失败。- 返回类型:
返回该共享内存对象的密钥类型。密钥类型与
nativeKey()
相辅相成,作为操作系统用于标识共享内存段标识符。你可以使用本地密钥访问尚未由 Qt 创建的共享内存段,或将共享内存访问权限授予非 Qt 应用程序。有关更多信息,请参阅 原生 IPC 密钥。
- 返回类型:
str
返回该共享内存对象的本地、平台特定的密钥。本地密钥是操作系统用于标识共享内存段标识符的标识符。
你可以使用本地密钥访问尚未由 Qt 创建的共享内存段,或将共享内存访问权限授予非 Qt 应用程序。有关更多信息,请参阅 原生 IPC 密钥。
- 参数:
key – str
type –
Type
- 返回类型:
- 参数:
key – str
这是一个重载函数。
设置该共享内存对象的旧版
key
。如果key
与当前 key 相同,函数将返回而不执行任何操作。否则,如果共享内存对象附加到底层共享内存段,它将在新 key 设置之前detach
从它。此函数不会执行attach()
。您可以调用
key()
来检索旧版 key。此功能大致与以下代码一样:shm.setNativeKey(QSharedMemory::legacyNativeKey(key));
除了它启用使用
key()
获取旧版 key。另请参阅
- 参数:
key –
QNativeIpcKey
设置此共享内存对象的本地、平台特定的
key
。如果key
与当前本地 key 相同,函数将返回而不执行任何操作。如果共享内存对象已附加到底层共享内存段,它将在新 key 设置之前detach
从它。此函数不会执行attach()
。如果本地 key 来自其他进程,则此函数很有用。有关更多信息,请参阅 本地 IPC Keys。
可以使用 platformSafeKey() 获取可移植的本地键。
可以通过调用
nativeKey()
来检索本地 key。为该类型为
type
的共享内存对象设置本机、平台特定的key
(类型参数自 Qt 6.6 起可用)。如果key
与当前的本机密钥相同,则该函数返回而不做任何操作。否则,如果共享内存对象连接到底层共享内存段,则设置新密钥前将使用detach
从该段中分离出来。此函数不执行attach()
。如果原生密钥是从另一个进程中共享的,则此函数很有用,尽管应用程序必须确保密钥类型与另一个进程期望的类型匹配。有关更多信息,请参阅 Native IPC Keys。
可以使用 platformSafeKey() 获取可移植的本地键。
可以通过调用
nativeKey()
来检索本地 key。- 返回类型:
int
返回附加的共享内存段的大小。如果没有附加共享内存段,则返回 0。
- 返回类型:
bool
释放共享内存段上的锁并返回
true
,如果当前该进程正在持有此锁。如果段未锁定或由另一个进程持有锁,则该函数不做任何操作,并返回false
。另请参阅