QCopChannel的工作原理

2021-05-23 01:24:05 字數 1515 閱讀 8427

一般來說,不同的應用程式會啟動不同的程序,這樣就會產生程序間通訊問題,比較常見的是程序

a傳送了乙個訊息

a給程序

b,程序

b呼叫自己的方法

b()進行處理。由於執行中的程序往往就是多個類的執行過程,下面將

a, b

簡化為程序中的類。 在

b中如何處理訊息

1. 在類b

中註冊乙個

qcopchannel

,註冊時要給出自己的身份標識。

其中是程序

b在系統註冊的名稱,其它程序要通過這個名稱來訪問它。

2. 建立乙個

slot

函式並將其同

achannel

傳回的訊息繫結,這樣一旦有訊息從

achannel

傳出,則這個

slot

函式就會執行。

connect(syschannel, signal(received(const qcstring &, const qbytearray &)),

this, slot(b(const qcstring &, const qbytearray &)));

3. 實現void b(const qcstring & msg, const qbytearray & data)

函式。

其中msg

是要傳遞的訊息名稱,如

」quit()」

、」open(qstring)」

、」edit(qstring, int)」;

並不是來自

a的所有訊息我們都要處理,所以這裡要做乙個判斷。

data

是訊息的附加資訊,即

msg訊息中的引數(如

open(qstring)

中的qstring

具體值),要取出這個值有點麻煩,比如要取出

edit(qstring,int)

的兩個引數:

qdatastream stream(data, io_readonly);

qstring str;

int i

stream >> str;

stream >> i; 在

a中如何傳送訊息: 1.

直接傳送:

第乙個引數是接收該訊息的管道名,第二個是

msg名稱。 如果

msg帶引數,則還要將引數輸入到乙個

qbytearray

類的data中:

qbytearray data;

qdatastream s(data, io_writeonly);

qcstring str(

「hello」);

s << str;

2.將其包裝到乙個信封裡傳送:

qstring str(「hello」);

e << str;

採用這種方式可以直接輸入資料,不用經過

qdatastream

,上述語句執行完後,訊息會自動發到指定管道,無需手動操作。

uWSGI django nginx的工作原理流程

wsgi 一種實現python解析的通用介面標準 協議,是一種通用的介面標準或者介面協議,實現了python web程式與伺服器之間互動的通用性。利用它,web.py或bottle或者django等等的python web開發框架,就可以輕鬆地部署在不同的web server上了 uwsgi 同ws...

Write Ahead Log(WAL)的工作原理

在儲存系統的執行過程中,每時每刻都發生著資料的更新,背後意味著諸如建立,刪除,修改檔案等資料的操作。拋開物理檔案資料的改變,對於中心控制節點而言,這些都會涉及到元資料的更新操作。而為了保持系統元資料和物理資料間的狀態一致性,系統所有的資料操作對應的元資料變更都需要持久化到元資料db內,但其實這裡有乙...

Read Write spinlock工作原理

1 假設臨界區內沒有任何的thread,這時候任何read thread或者write thread可以進入,但是只能是其一。2 假設臨界區內有乙個read thread,這時候新來的read thread可以任意進入,但是write thread不可以進入 3 假設臨界區內有乙個write thr...