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 –
QNativeIpcKey
parent –
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。另请参阅