一般來說,不同的應用程式會啟動不同的程序,這樣就會產生程序間通訊問題,比較常見的是程序
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...