Qt 程序間通訊(IPC)

2021-07-05 01:08:26 字數 1125 閱讀 7896

qt 是乙個跨平台的應用框架,其程序間通訊機制當然可以使用所在平台的程序間通訊機制,如在windows平台上的message機制、共享記憶體、檔案對映、管道、socket等。其中,qt對一些許多平台共有的ipc機制進行了封裝。

qt官方文件中對qt的ipc機制是這樣介紹的:

tcp/ip

其實就是通過網路模組實現的ipc。不過qt對其進行了封裝,並提供了兩個層次的api,包括應用程式級的qnetworkaccessmanager, qftp等和底層的qtcpsocket, qtcpserver, qsslsocket等。

shared memory(共享記憶體)

qt提供了一種安全的共享記憶體的實現(見qsharedmemory),以便在多執行緒和多程序程式設計中安全的使用。另外 qsystemsemaphore可以作為系統共享資源或程序間通訊的訪問控制。

d-bus

d_bus是一種低開銷、低延遲的ipc。qt提供了qtdbus模組,該模組

使用d-bus協議,把訊號與槽機制(signal  and slot)擴充套件到程序級別,使得開發者可以在乙個程序中發出訊號,可以再其他程序定義槽來響應這些訊號。

qt communications protocol (qcop)

qcop 是 qt 內部的一種通訊協議,這種協議用於不同的客戶之間在同一位址空間內部或者不同的程序之間的通訊。目前,這種機制還只在 qt 的嵌入式版本中提供。

為實現這種通訊機制,qt 中包括了由 qobject 類繼承而來的 qcopchannel 類,該類提供了諸如 send()、isregistered() 等靜態函式,它們可以在脫離物件的情況下使用。為了在 channel 中接收通訊資料,使用者需要構造乙個 qcopchannel 的子類並提供 receive() 函式的過載函式,或者利用 connect() 函式與接收到的訊號相聯絡。值得一提的是,在 qt 系統中,只提供了 qcop 協議機制和用於接收訊息的類,而如何傳送訊息則沒有提供相應的類供使用者使用。

在基於 qt 的桌面系統 qtopia(qpe)中,則提供了相應的傳送類:qcopenvelope。使用者可以通過該類利用 channel 向其他程序傳送訊息。該類將通過 qcopchannel 傳送 qcop 訊息的過程進行了封裝,使用者只需要呼叫該類中的相關函式就可以方便地實現程序之間的通訊。

from: 

程序間通訊IPC

這兩天學習了 unix 的程序間通訊 ipc,這裡面有幾個很重要的基本概念,特別是訊息佇列和我的畢設很有關係,因此多說幾句。以前學習的程序間通訊方式,一般都是經由 fork 或exec 開啟檔案,或經過檔案系統。而 ipc是程序間通訊方式的統稱。下面一一道來。一 管道 管道是最老的 ipc形式。管道...

程序間通訊 IPC

part2 index1.html part2 index2.html linux至少支援如下ipc機制 同時支援posix和system v方式 streams ipc機制,linux本身不支援,有乙個單獨的安裝包 可以跨pc的程序通訊 互斥鎖或條件變數 動態初始化 不能使靜態分配 在共享記憶體中...

程序間通訊IPC

乙個大型的應用系統,往往需要眾多程序協作,程序間通訊的重要性顯而易見。首先,程序間通訊至少可以通過傳送開啟檔案來實現,不同的程序通過乙個或多個檔案來傳遞資訊,事實上,在很多應用系統裡,都使用了這種方法。但一般說來,程序間通訊 ipc interprocess communication 不包括這種似...