1. 程式人生 > >QSharedMemory 共享記憶體 程序間通訊

QSharedMemory 共享記憶體 程序間通訊

QT間程序通訊之共享記憶體

Qt提供了一種安全的共享記憶體的實現QSharedMemory,以便在多執行緒和多程序程式設計中安全的使用。

下面的例子以兩個程序exe共享一塊記憶體為例。

先說下實現共享記憶體的步驟,然後用一具體的例項說明。

向共享記憶體中提供資料的一方:

寫入資料的順序,最後是先呼叫一次detach(),然後呼叫create()重新申請記憶體。此時detach()實際上是清除共享記憶體中資料的作用

1,定義QSharedMemory shareMemory,並設定標誌名shareMemory.setKey();//告訴os,我要使用這塊memory,

2,將共享記憶體與主程序分離

 shareMemory.detach();//如果是當前exe是最後一個使用該memory的程序,那麼detach()後,該共享記憶體的記憶體地址就被os釋放了,即data()返回null。

但是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()

相關推薦

QSharedMemory 共享記憶體 程序通訊

QT間程序通訊之共享記憶體 Qt提供了一種安全的共享記憶體的實現QSharedMemory,以便在多執行緒和多程序程式設計中安全的使用。 下面的例子以兩個程序exe共享一塊記憶體為例。 先說下實現共享記憶體的步驟,然後用一具體的例項說明。 向共享記憶體中提供資料的一

QT之QSharedMemory 詳解 程序通訊

QSharedMemory的幾個重要介面: setKey(),這是標記共享記憶體的一個識別符號, 在整個作業系統的共享記憶體中,用這個key去標識它,唯一標識。 create(),建立共享記憶體,向os申請記憶體空間, 如果不建立,呼叫attach()會失敗, 在creat

ython實現程序通訊有Queue,Pipe,Value+Array等,其中Queue實現多個程序通訊,而Pipe實現兩個程序通訊,而Value+Array使用得是共享記憶體對映檔案的方式,所以速度比較快

1.Queue的使用 from multiprocessing import Queue,Process import os,time,random #新增資料函式 def proc_write(queue,urls): print("程序(%s)正在寫入..."%(os.getpid()))

c/c++ linux 程序通訊系列4,使用共享記憶體

linux 程序間通訊系列4,使用共享記憶體 1,建立共享記憶體,用到的函式shmget, shmat, shmdt 函式名 功能描述 shmget 建立共享記憶體,返回pic key

程序通訊(三)共享記憶體

概念: 共享記憶體區是最快的IPC形式。⼀一旦這樣的記憶體對映到共享它的程序的地址空間,這些程序間資料傳遞不再 涉及到核心,換句話說是程序不再通過執⾏行進⼊入核心的系統調⽤用來傳遞彼此的資料。 共享記憶體中的函式: shmget函式: 功能:⽤用來建立共享記憶體 原型

Linux:程序通訊(匿名管道命名管道)(共享記憶體,訊息佇列,訊號量)

目錄 程序間通訊的介紹 管道 匿名管道 原理: 程式碼實現 匿名管道特性 實現管道符 |  命名管道 命名管道特性 程式碼實現 管道讀寫規則 作業系統中ipc的相關命令 共享記憶體(重點) 生命週期: 程式碼實現 程式碼實現獲

程序通訊 記憶體共享訊號量例項理解

申請記憶體: int shmget(key_t key, size_t size, int shmflg); 其中key為鑰匙,兩程序通過同一個鑰匙找到核心中的共享記憶體,可通過 key_t ftok(const char *pathname, int proj_id)

Linux(高階程式設計)8————程序通訊4(共享記憶體

共享記憶體是什麼? 因為程序之間是相互獨立的,他們有各自程序地址空間,那麼他們需要通訊時就要藉助核心來為他們建立橋樑,像之前我們瞭解的管道、訊息佇列就是核心做的工作來為程序間通訊架的橋樑。共享記憶體也是核心為程序間通訊駕的一座橋樑,只不過這座橋樑比其他橋樑更優,共享記憶體是核心為需要通訊

php程序通訊--共享記憶體

php如何實現共享記憶體。(注意:本示例是在linux下,請勿在windows下嘗試此程式碼,並且必須是在php-cli模式下) php提供了兩種實現共享記憶體的擴充套件。下面我們來一一講解。   一、shmop 系類函式 <?php $shm_key = ftok(__FILE

Linux 通過共享記憶體機制實現程序通訊

問題背景 編寫程式 sender ,它建立一個共享記憶體,然後等待使用者通過終端輸入一串字元,並將這串字元通過共享記憶體傳送給 receiver;最後,它等待 receiver 的應答,收到應答訊息後,將接收到的應答資訊顯示在終端螢幕上,刪除共享記憶體,結束程式的執行。 編寫 receiver 程

程序通訊——共享記憶體(Shared Memory)簡易原理和建立_獲得函式

共享記憶體是System V版本的最後一個程序間通訊方式。共享記憶體,顧名思義就是允許兩個不相關的程序訪問同一個邏輯記憶體,共享記憶體是兩個正在執行的程序之間共享和傳遞資料的一種非常有效的方式。不同程序之間共享的記憶體通常為同一段實體記憶體。程序可以將同一段實體記憶體連線到他們自己的地址空間中,所有

Linux關於程序通訊共享記憶體

共享記憶體概念 共享記憶體允許兩個不相關的程序去訪問同一部分邏輯記憶體 如果需要在兩個執行中的程序之間傳輸資料,共享記憶體將是一種效率極高的解決方案 共享記憶體是由IPC為一個程序建立的一個特殊的地址範圍,它將出現在程序的地址空間中。 其他程序可以把同一段共享記憶體段“連

程序通訊共享記憶體

一、共享記憶體的定義和原理 1、共享記憶體的定義   顧名思義,共享記憶體就是允許兩個不相關的程序訪問同一個邏輯記憶體。共享記憶體是在兩個正在執行的程序之間共享和傳遞資料的一種非常有效的方式。不同程序之

Linux 程序通訊(六)共享記憶體

可以說, 共享記憶體是一種最為高效的程序間通訊方式, 因為程序可以直接讀寫記憶體, 不需要任何資料的複製。 為了在多個程序間交換資訊, 核心專門留出了一塊記憶體區, 這段記憶體區可以由需要訪問的程序將其對映到自己的私有地址空間。 因此, 程序就可以直接讀寫這一記憶體區而不需要

程序通訊的方式——訊號、管道、訊息佇列、共享記憶體

多程序: 首先,先來講一下fork之後,發生了什麼事情。 由fork建立的新程序被稱為子程序(child process)。該函式被呼叫一次,但返回兩次。兩次返回的區別是子程序的返回值是0,而父程序的返回值則是新程序(子程序)的程序 id。將子程序id返回給父程序的理由是

嵌入式Linux併發程式設計,程序通訊方式,System V IPC物件,ftok(),共享記憶體使用步驟,建立shmget(),對映shmat(),撤銷對映shmdt(),控制shmctl(),注意

文章目錄 1,System V IPC 2,使用IPC物件的大致流程 3,生成KEY值ftok() ftok示例 4,共享記憶體 4.1,共享記憶體使用步驟 4.2,共享記憶體建立 shmget()

Linux系統程式設計——程序通訊共享記憶體

概述 共享記憶體是程序間通訊中最簡單的方式之一。共享記憶體允許兩個或更多程序訪問同一塊記憶體,就如同 malloc() 函式向不同程序返回了指向同一個實體記憶體區域的指標。當一個程序改變了這塊地址中的內容的時候,其它程序都會察覺到這個更改。 共享記憶體的特點: 1)共

程序通訊(二)共享記憶體、訊號量

本片部落格會貼上部分程式碼,想要了解更多程式碼資訊,可訪問小編的GitHub關於本篇的程式碼 共享記憶體 這裡有涉及的mmap的知識 下圖為共享記憶體原理圖 因為共享記憶體是直接將申請來的一塊實體記憶體對映到虛擬地址空間中,允許兩個或多個程序共享,因此進行

程序通訊之Linux共享記憶體程式設計

共享記憶體 共享記憶體(Shared Memory)是指多個程序共享一段指定的記憶體空間進行資料互動,三種System V IPC機制(另外兩種是訊號量和訊息佇列)中共享記憶體是速度最快的一種。 共享記憶體機制是最快的一種程序間通訊(Interprocess Commun

程序通訊--共享記憶體

共享記憶體 當一個程式想和另外一個程式通訊的時候,那記憶體將會為這兩個程式生成一塊公共的記憶體區域。這塊被兩個程序分享的記憶體區域叫做共享記憶體 共享記憶體是程序間通訊最簡單的一種,共享記憶體允許兩個或更多程序訪問同一塊記憶體,就如同 malloc() 函式向不