QSharedMemory 共享記憶體 程序間通訊
QT間程序通訊之共享記憶體
Qt提供了一種安全的共享記憶體的實現QSharedMemory,以便在多執行緒和多程序程式設計中安全的使用。
下面的例子以兩個程序exe共享一塊記憶體為例。
先說下實現共享記憶體的步驟,然後用一具體的例項說明。
向共享記憶體中提供資料的一方:
寫入資料的順序,最後是先呼叫一次detach(),然後呼叫create()重新申請記憶體。此時detach()實際上是清除共享記憶體中資料的作用,
1,定義QSharedMemory shareMemory,並設定標誌名shareMemory.setKey();//告訴os,我要使用這塊memory,
2,將共享記憶體與主程序分離
但是key還在,還可以使用後面的create()再重新向os申請記憶體,
3,建立共享記憶體 shareMemory.create();//向os申請記憶體
4,將共享記憶體上鎖shareMemory.lock();
5,將程序中要共享的資料拷貝到共享記憶體中;
6,將共享記憶體解鎖shareMemory.unlock();
寫完後,堅決不能呼叫detach(),如果呼叫detach(),那麼共享記憶體的記憶體會被os釋放掉,寫入的位元組就被刪除
從共享記憶體中取資料的一方:(讀取資料,必須呼叫attach())
1,定義QSharedMemory shareMemory,並設定共享記憶體的標誌名shareMemory.setKey()注意設定的要與提供記憶體共享的一方要一樣。
2,將共享記憶體上鎖shareMemory.lock();
3,將共享記憶體與主程序繫結shareMemory.attach(),使該程序可以訪問共享記憶體的資料;
4,從共享記憶體中取資料;
5,使用完後將共享記憶體解鎖shareMemory.unlock(),另外將共享記憶體與該程序分離shareMemory.detach();