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();
如程序運行圖:
上面的程序(稱為A)將圖片從文件中讀取並顯示,同時將讀取的圖片數據復制到共享內存。下面的程序(稱為B)直接從共享內存中獲取A讀取的圖片數據並顯示出來。
源代碼下載:
------------------------------------------分割線------------------------------------------
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2016年資料/1月/8日/Qt共享內存實現進程間通信(QSharedMemory)/
下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm
------------------------------------------分割線------------------------------------------