QSharedMemory 類提供對共享內存段的訪問。 更多...
| 頭: | #include <QSharedMemory> |
| qmake: | QT += core |
| Since: | Qt 4.4 |
| 繼承: | QObject |
該類在 Qt 4.4 引入。
| enum | AccessMode { ReadOnly, ReadWrite } |
| enum | SharedMemoryError { NoError, PermissionDenied, InvalidSize, KeyError, AlreadyExists, …, UnknownError } |
| QSharedMemory (const QString & key , QObject * parent = nullptr) | |
| QSharedMemory (QObject * parent = nullptr) | |
| virtual | ~QSharedMemory () |
| bool | attach (QSharedMemory::AccessMode mode = ReadWrite) |
| const void * | constData () const |
| bool | create (int size , QSharedMemory::AccessMode mode = ReadWrite) |
| void * | data () |
| const void * | data () const |
| bool | detach () |
| QSharedMemory::SharedMemoryError | error () const |
| QString | errorString () const |
| bool | isAttached () const |
| QString | key () const |
| bool | lock () |
| QString | nativeKey () const |
| void | setKey (const QString & key ) |
| void | setNativeKey (const QString & key ) |
| int | size () const |
| bool | unlock () |
QSharedMemory 提供對多綫程和進程共享內存段的訪問。它還為單綫程 (或進程) 提供鎖定內存的獨占訪問手段。
當使用此類時,要意識到以下平颱差異:
記得鎖定共享內存采用 lock () 在讀寫共享內存之前,和記住釋放鎖采用 unlock () 在完成後。
QSharedMemory 自動銷毀共享內存段,當從段分離最後 QSharedMemory 實例時,且不保留段引用。
警告: QSharedMemory 以特定 Qt 方式改變鍵,除非另外指定。與非 Qt 應用程序的互操作的達成是通過首先創建默認共享內存采用 QSharedMemory(),然後設置本機鍵采用 setNativeKey ()。當使用本機鍵時,不保護對共享內存的多次訪問 (例如:無法 lock ()) 且應該使用用戶定義機製來達成這種保護。
| 常量 | 值 | 描述 |
|---|---|---|
QSharedMemory::ReadOnly
|
0
|
共享內存段是隻讀的。不允許寫入共享內存段。嘗試寫入采用 ReadOnly 創建的共享內存段,會導緻程序中止。 |
QSharedMemory::ReadWrite
|
1
|
允許讀寫共享內存段。 |
| 常量 | 值 | 描述 |
|---|---|---|
QSharedMemory::NoError
|
0
|
沒有齣現錯誤。 |
QSharedMemory::PermissionDenied
|
1
|
操作失敗,因為調用者沒有所需權限。 |
QSharedMemory::InvalidSize
|
2
|
創建操作失敗,因為請求大小無效。 |
QSharedMemory::KeyError
|
3
|
操作失敗,因為鍵無效。 |
QSharedMemory::AlreadyExists
|
4
|
A create () 操作失敗,因為具有指定鍵的共享內存段已存在。 |
QSharedMemory::NotFound
|
5
|
An attach () 失敗,因為找不到具有指定鍵的共享內存段。 |
QSharedMemory::LockError
|
6
|
試圖 lock () 共享內存段失敗,因為 create () 或 attach () 失敗和返迴 false,或因為發生係統錯誤在 QSystemSemaphore::acquire (). |
QSharedMemory::OutOfResources
|
7
|
A create () 操作失敗,因為沒有足夠內存可用於填充請求。 |
QSharedMemory::UnknownError
|
8
|
發生其它事情且很糟糕。 |
構造共享內存對象采用給定 parent 並將其鍵設為 key 。因為有設置鍵,其 create () 和 attach () 函數可以被調用。
另請參閱 setKey (), create (),和 attach ().
此函數重載 QSharedMemory()。
構造共享內存對象采用給定 parent 。由於構造函數未設置共享內存對象的鍵,因此,共享內存對象沒有附加底層共享內存段。必須設置鍵采用 setKey () 或 setNativeKey () 先於 create () 或 attach () 可以使用。
另請參閱 setKey ().
[虛擬]
QSharedMemory::
~QSharedMemory
()
析構函數清零鍵,強製共享內存對象 detach 從其底層共享內存段。若此共享內存對象是連接到共享內存段的最後一個, detach () 操作會銷毀共享內存段。
另請參閱 detach () 和 isAttached ().
試圖將進程附加到共享內存段,通過傳遞給構造函數的鍵標識或調用
setKey
() 或
setNativeKey
()。訪問
mode
is
ReadWrite
默認情況下。它還可以為
ReadOnly
。返迴
true
若附加操作成功。若返迴 false,調用
error
() 以確定發生何種錯誤。在附加共享內存段後,可以獲得共享內存的指針通過調用
data
().
另請參閱 isAttached (), detach (),和 create ().
返迴共享內存段內容的 const 指針,若有附加一個的話。否則,返迴 null。記得鎖定共享內存采用 lock () 在讀寫共享內存之前,和記住釋放鎖采用 unlock () 在完成後。
創建共享內存段
size
字節采用傳遞給構造函數的鍵,設置采用
setKey
() 或設置采用
setNativeKey
(),然後附加到新共享內存段采用給定訪問
mode
並返迴
true
。若由鍵標識的共享內存段已存在,不履行附加操作和
false
被返迴。當返迴值為
false
,調用
error
() 以確定發生何種錯誤。
另請參閱 error ().
返迴共享內存段內容的 const 指針,若有附加一個的話。否則,返迴 null。記得鎖定共享內存采用 lock () 在讀寫共享內存之前,和記住釋放鎖采用 unlock () 在完成後。
另請參閱 attach ().
此函數重載 data()。
從共享內存段分離進程。若這是附加到共享存儲段的最後進程,則共享存儲段由係統釋放 (即:銷毀內容)。函數返迴
true
若它分離瞭共享內存段。若它返迴
false
,通常意味著段未被附加或被另一進程鎖定。
另請參閱 attach () 和 isAttached ().
返迴指示是否發生錯誤的值,且若如此,指示錯誤是什麼。
另請參閱 errorString ().
返迴最後發生錯誤的文本描述。若 error () 返迴 錯誤值 ,調用此函數以獲取描述錯誤的文本字符串。
另請參閱 error ().
返迴
true
若此進程被附加到共享內存段。
返迴的鍵賦值采用 setKey () 到此共享內存,或 null 鍵若尚未賦值鍵,或段使用的是 nativeKey ()。鍵是 Qt 應用程序用來標識共享內存段的標識符。
可以找到由操作係統使用的本機、特定平颱鍵,通過調用 nativeKey ().
另請參閱 setKey () 和 setNativeKey ().
這是鎖供此進程訪問的共享內存段的信號量,並返迴
true
。若另一進程已鎖定段,此函數阻塞直到鎖被釋放為止。然後,獲取鎖並返迴
true
。若此函數返迴
false
,意味著已忽略的 false 返迴來自
create
() 或
attach
(),已設置鍵采用
setNativeKey
() 或
QSystemSemaphore::acquire
() 失敗由於未知係統錯誤。
另請參閱 unlock (), data (),和 QSystemSemaphore::acquire ().
返迴用於此共享內存對象的本機、特定平颱鍵。本機鍵是操作係統用於標識共享內存段的標識符。
可以使用本機鍵訪問 Qt 尚未創建的共享內存段,或將共享內存訪問授予非 Qt 應用程序。
該函數在 Qt 4.8 引入。
另請參閱 setKey () 和 setNativeKey ().
設置平颱無關 key 為此共享內存對象。若 key 與當前鍵相同,函數將什麼都不做而返迴。
可以調用 key () 以檢索平颱無關鍵。在內部, QSharedMemory 將此鍵轉換成平颱特定鍵。若改為調用 nativeKey (),將獲得特定平颱的轉換鍵。
若將共享內存對象附加到底層共享內存段,它將 detach 從其,在設置新鍵之前。此函數不做 attach ().
另請參閱 key (), nativeKey (),和 isAttached ().
設置特定平颱本機 key 為此共享內存對象。若 key 與當前本機鍵相同,函數將什麼都不做而返迴。若隻想為段賦值鍵,應調用 setKey () 代替。
可以調用 nativeKey () 以檢索本機鍵。若有賦值本機鍵,調用 key () 將返迴 null 字符串。
若將共享內存對象附加到底層共享內存段,它將 detach 從其,在設置新鍵之前。此函數不做 attach ().
應用程序將不可移植,若設置本機鍵。
該函數在 Qt 4.8 引入。
另請參閱 nativeKey (), key (),和 isAttached ().
返迴共享內存段的附加大小。若未附加共享內存段,返迴 0。
注意: 段大小可能大於請求大小,被傳遞給 create ().
釋放共享內存段鎖並返迴
true
,若鎖目前由此進程保持。若段未被鎖定,或鎖由另一進程所保持,則什麼也不會發生並返迴 false。
另請參閱 lock ().