信號還是有它的局限性。
就是系結的時候,需要知道sender和receiver,其實和回呼函式差不多了。
我想要發送者和接收者解耦。
即:發送者和接受者彼此不知道對方是誰。
發送者不知道一個訊息是誰接收的;接收者也不知道一個訊息是誰發送的。
對了,訊息里面要允許系結一些資料。
uj5u.com熱心網友回復:
有啊,使用postEvent或者sendEvent然后接收方的eventloop里處理這些event.只要注意,這兩個函式的使用區別。主要是event的所有權區別
uj5u.com熱心網友回復:
postEvent和sendEvent也需要指定receiver,Qt沒有提供全域發送事件的功能。另外signal/slot和callback的區別還是有的:
1:如果你給一個物件A設定了一個callback,而這個callback是物件B的成員函式,如果B物件銷毀了,A并不知道callback是否還有效,但實際上callback已經不能被呼叫了。如果用signal/slot,sender觸發信號并不需要擔心receiver已經銷毀了,因為在銷毀的時候所有連接都已經斷開。
2:如果多個物件需要監控一個物件,那么可以通過在被監控物件上設定多個callback來監控這個物件,這樣被監控物件就需要維護一個串列來存放多個callback。而用signal/slot只需要在回圈里面連接被監控物件和監控物件就行了。
uj5u.com熱心網友回復:
那就只好用訊息佇列來解耦了。rabbitMQ,kafka,轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/84463.html
標籤:Qt
