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