4

たとえば、関数があります

void A::fun()
{
    do_1();
    emit signal_1();

    do_2();
    emit signal_2();

    do_3();
}

と の間には接続がsignal_1ありslot_1ます。signal_2との間slot_2slot_1とはいつslot_2呼び出されますか? いくつかの回答オプション:

  1. fun が戻った後、slot_1before slot_2;を呼び出します。
  2. slot_1do_1に呼び出され、後slot_2に呼び出されます do_2

または他の人。

4

2 に答える 2

7

直接接続の場合(別スレッドから接続しない場合のデフォルト)

スロットはすぐに呼び出されるため、結果は次のようになります。

do_1
slot_1
do_2
slot_2
do_3

同じスレッドから呼び出されたキュー接続の場合(手動で設定する必要があります)

関数の実行は終了する必要があり、メインループはスロットを呼び出すことができます

do_1 
do_2 
do_3 
slot_1    
slot_2 

別のスレッドから呼び出されたキュー接続の場合

スレッドの問題のため、より複雑です。結果は、最初または 2 番目の例 (または組み合わせ) のようになります。呼び出し順序がどうなるかは保証されません!

do_1 
slot_1    
do_2 
do_3 
slot_2 

ここでQt::ConnectionTypeの説明を見ることができます

于 2013-09-20T07:50:35.230 に答える