基於QT的程序間通訊元件

2021-09-24 05:06:07 字數 699 閱讀 5960

程序間通訊在windows客戶端中也經常會有用到,很多客戶端都需要多個程序來合作完成任務。比如說第三方sdk容器程序或者是後台服務程序。windows上的程序間通訊方式比較多,常用的就是共享記憶體。

通用的做法是,建立一塊共享記憶體,乙個程序寫,乙個程序讀,這是最簡單的場景。主程序寫入共享記憶體,然後用訊號量或者時間物件等核心物件通知輔助程序讀取資料就可以了。另乙個複雜的場景就是,雙方都要進行讀寫,這個時候策略管控就更為嚴格。

現在定乙個目標需求: 我們需要乙個rpc功能的元件,就像在本程序呼叫函式一樣,傳入函式名和引數,函式處理完之後返回。

為了避免封包結包的麻煩,同一程序可以在多執行緒先進行寫操作,但是需要保證同時只有乙個寫入,而且對方沒有處理完資料,寫入操作不能返回。這樣保證了雙方程序一次只進行一次互動,省去了很多麻煩。

技術方案:

1.同程序寫入需要鎖,保證同時只有乙個執行緒在寫入共享記憶體

2.寫完之後通知對方程序讀取資料,當前執行緒阻塞等待,直到對方程序處理完畢後發出訊號。

統計需要的資源:

這樣程序雙方為了獲得讀取資料的訊號,各需要乙個訊號量。為了獲知對方處理完畢雙方還需要乙個訊號。所以總共就需要4個訊號量。為了保證同程序同時只有乙個寫入操作,還需要一把鎖mutex。

為了等待訊號量讀取資料,雙方程序都需要乙個單獨的讀程序用於等待處理操作。

所以統計一下,我們需要的資源,乙個共享記憶體,4個訊號量,乙個mutex,乙個讀執行緒。

qt 程序間通訊

qt中仍可以利用傳統的程序間通訊方式 共享記憶體.在桌面環境中,在傳統的程序間通訊方式的基礎上發展了更為方便的物件導向的通訊方式 kde環境 dcop gnome環境 bonobo dbus freedesktop開源專案的linux ipc通訊機制,kde和gnome環境都能支援 qt embed...

qt 程序間通訊

qt中仍可以利用傳統的程序間通訊方式 共享記憶體.在桌面環境中,在傳統的程序間通訊方式的基礎上發展了更為方便的物件導向的通訊方式 kde環境 dcop gnome環境 bonobo dbus freedesktop開源專案的linux ipc通訊機制,kde和gnome環境都能支援 qt embed...

Qt程序間通訊

程序間通訊,就是在不同程序之間傳播或交換資訊。管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 named pipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semophor...