我不認爲隊列信號仍然傳送在接收線程disconnect()
之後,而不是問題的:QObject :: disconnect()之後是否保證沒有信號從另一個線程傳遞?
考慮到一個Sender
對象在線程1產生信號的情況下,有一個Receiver
對象在螺紋2其中有一個插槽通過Qt::DirectConnection
連接到Sender
的信號。
現在,在Receiver::~Receiver()
中,我需要確保在對象已經(可能部分)被破壞時仍然沒有信號被傳遞。因爲連接是直接的,所以可以隨時在線程1中調用該插槽,並且特別可以在破壞Receiver
的特定屬性和破壞基礎QObject
之間發生,這也將斷開信號。所以,我的問題歸結爲:
是否足夠給Receiver
對象的破壞之前斷開的線2 Sender
和Receiver
對象,或者我需要確保沒有信號的disconnect()
在通話過程中的線程1發出?
我在考慮線程1處於發射信號的中間的情況,例如,就在執行接收槽的頂部,並且在那一刻,在線程2中,完成了disconnect()
的調用。如果disconnect()
等待(通過互斥體)線程1在完成斷開連接之前完成傳送信號並阻止進一步的信號傳送,則一切都會正常,但我不確定是這種情況。
謝謝,是的,我看到了。我不確定的是信號的傳輸是否使用相同的互斥體進行保護。 –
是的,他們是。檢查我更新的答案 – pnezis