Qt提供了一種安全的共享內存的實現QSharedMemory,以便在多線程和多進程編程中安全的使用。

 

  先説下實現共享內存的步驟,然後用一具體的實例説明。

  (一)向共享內存中提供數據的一方:

  1,定義QSharedMemory shareMemory,並設置標誌名shareMemory.setKey(),例如shareMemory.setKey("shareimg");

  2,將共享內存與主進程分離 shareMemory.detach();

  3,創建共享內存 shareMemory.create();

  4,將共享內存上鎖shareMemory.lock();

  5,將進程中要共享的數據拷貝到共享內存中;

  6,將共享內存解鎖shareMemory.unlock();

(二)從共享內存中取數據的一方:

  1,定義QSharedMemory shareMemory,並設置共享內存的標誌名shareMemory.setKey()注意設置的要與提供內存共享的一方要一                    

           樣,本例是shareMemory.setKey("shareimg")。

  2,將共享內存上鎖shareMemory.lock();

  3,將共享內存與主進程綁定shareMemory.attach(),使該進程可以訪問共享內存的數據;

  4,從共享內存中取數據;

  5,使用完後將共享內存解鎖shareMemory.unlock(),最後將共享內存與該進程分離shareMemory.detach();

 

如程序運行圖:

QSharedMemory 共享數據_Memory

 

上面的程序(稱為A)將圖片從文件中讀取並顯示,同時將讀取的圖片數據複製到共享內存。下面的程序(稱為B)直接從共享內存中獲取A讀取的圖片數據並顯示出來。