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