類常用的操作
1、qsharedmemory類物件的建立
利用qsharedmemory類建立例項物件時,必須為該共享記憶體指定關鍵字(即為該共享記憶體起乙個名字)。只有當共享記憶體被設定了關鍵字之後,才可以執行建立
create()
、關聯attach()
等操作。為共享記憶體指定關鍵字有兩種方法:
② 通過建構函式qsharedmemory::
qsharedmemory
(qobject
* parent = 0 )
構造例項物件,之後呼叫setkey()函式為該例項物件設定關鍵字。
例如:qsharedmemory
* sharememory;
sharememory = new
qsharedmemory
();sharememory->setkey("
qsharedmemoryexample
");2、建立共享記憶體
為qsharedmemory類例項物件建立乙個空間大小為size的共享記憶體,該記憶體空間預設的訪問方式為可讀可寫。共享記憶體建立成功返回true,否則返回false。qsharedmemory類定義乙個列舉類變數accessmode,指定了兩種共享記憶體的訪問方式:
qsharedmemory::readonly 唯讀方式訪問共享記憶體
qsharedmemory::readwrite 讀寫方式訪問共享記憶體
3、關聯共享記憶體
將以關鍵字key命名的共享記憶體和當前程式進行關聯,共享記憶體預設的訪問方式為可讀可寫。如果程式和共享記憶體關聯成功,返回true,否則返回false。
4、分離共享記憶體
解除共享記憶體和程式的關聯,即呼叫該函式後,程式不可以再訪問共享記憶體。如果該共享記憶體被多個程式例項所關聯,當最後乙個程式例項和共享記憶體解除關聯後,該共享記憶體將由作業系統自動釋放掉。分離操作成功,返回true。如果返回false,通常意味著該共享記憶體和程式分離失敗,或者其他程式當前正在訪問該共享記憶體,分離操作執行失敗。
5、判斷共享記憶體的關聯狀態
該函式用來判斷程式(呼叫該函式的程式)是否和共享記憶體進行關聯,是返回true,否返回false。
6、設定/獲取共享記憶體的關鍵字
qt應用程式通過關鍵字來辨識共享記憶體。
key()
函式用來獲取共享記憶體的關鍵字,如果沒有指定例項物件的關鍵字,或者共享記憶體的關鍵字是由
native
key()
函式指定的話,則返回空。
setkey
()函式用來為共享記憶體段設定關鍵字
(為共享記憶體命名
),如果引數
key的值和建構函式或者之前指定的關鍵字相同的話,則該函式將不做任何操作,直接返回。
7、鎖定/解鎖共享記憶體
如果共享記憶體資源被當前程序所占有,呼叫該函式將解鎖該共享資源,並返回true。如果當前程序沒有占用該資源,或者共享記憶體被其他程序訪問,則不做任何操作並返回false。
為了保證共享記憶體中資料的完整性,當乙個程序在讀寫共享記憶體的時候,其他程序不允許對該共享區域進行訪問。qsharedmemory類提供了lock()
函式和unlock()
函式來實現這一共享記憶體訪問機制。某一程式對共享記憶體進行讀寫操作之前,需要呼叫lock()
函式鎖定該共享記憶體,之後獨享共享記憶體中的資料,並對資料進行讀寫等操作。共享記憶體訪問完畢,呼叫unlock()
函式,釋放共享記憶體的使用許可權。
8、錯誤原因
9、獲取共享記憶體的位址
void
* qsharedmemory::
data
()程式關聯共享記憶體的前提下,呼叫該函式返回共享記憶體中資料的起始位址。如果沒有關聯共享記憶體,則返回0。
10、獲取共享記憶體的大小
呼叫該函式將返回程式所關聯的共享記憶體的大小(位元組)。如果沒有關聯的共享記憶體,則返回0。
qt共享記憶體
寫入部分 本次程式基於控制台程式 首先 使用共享記憶體得召喚一下 include 然後 宣告qsharedmemory類。並且命名為smem qsharedmemory smem 由於共享記憶體沒有訪問金鑰,則不能找到共享的記憶體。我們給他設定一下訪問金鑰 qstring key,sharedstr...
qt 共享記憶體 QSharedMemory
本次程式基於控制台程式 首先 使用共享記憶體得召喚一下 include 然後 宣告qsharedmemory類。並且命名為smem qsharedmemory smem 由於共享記憶體沒有訪問金鑰,則不能找到共享的記憶體。我們給他設定一下訪問金鑰 qstring key,sharedstring 設...
QT學習》QT生成與呼叫共享庫
1.建立c 庫 1.1點選new project 1.2選擇庫模板 選擇 library 中的 c 庫 再點選 choose 1.3選擇共享庫 給共享庫取個名稱,並指定生成檔案存放路徑。再點選 下一步 1.4選擇編譯器 再點選 下一步 1.5選擇所需要的模組 預設選擇qtcore qtcore 模組...