disconnect()代わりに、キューに入れられたシグナルが受信スレッドで引き続き配信されるという問題については考えていません。
Senderオブジェクトがスレッド 1 でシグナルを生成しており、スレッド 2 に を介してシグナルReceiverに接続されているスロットを持つオブジェクトがある場合を考えてみましょう。SenderQt::DirectConnection
さて、 ではReceiver::~Receiver()、オブジェクトがすでに (おそらく部分的に) 破壊されている間にシグナルが配信されないようにする必要があります。接続が直接であるため、スロットはいつでもスレッド 1 で呼び出すことができ、特にReceiverの特定の属性の破棄とベースの破棄の間に発生する可能性があり、QObject信号も切断されます。したがって、私の質問は次のようになります。
オブジェクトを破棄する前にスレッド 2 のオブジェクトSenderを切断するだけで十分ですか、それとも呼び出し中にスレッド 1 でシグナルが発信されないようにする必要がありますか?ReceiverReceiverdisconnect()
スレッド 1 が信号を送信している最中にある場合を考えています。たとえば、受信スロットの実行の一番上にあり、その瞬間にスレッド 2 でdisconnect()呼び出しが行われます。スレッド 1 がシグナルの配信を終了するのを (ミューテックスを介して) 待ってから、切断を実行し、それ以上のシグナル配信をブロックする場合disconnect()、すべて問題ありませんが、そうであるかどうかはわかりません。