2017-08-25 14 views
0

Qkeyeventを使用してQTでキーAイベントとBイベントを定義しています。私がキーボードでAを押すと、1秒間を費やすプロセスA()が実行されます。キーボードでBを押すと、プロセスB()が実行されます。 A()を処理してグローバル値を更新し、プロセスB()で値を取得したい。しかし、プロセスA()は1秒間を費やします。私がキーBをすばやく押すと間違った値を取得します.QTでBをすばやく押すと、プロセスA()が終了するまで待つことができます。QTでプロセスが終了するまでkeyeventを待つ方法

int g = 3; 
A() { 
    ... 
    //cost 1 second 
    g = 4; 

} 
B() { 
    cout << g; 
} 

まず、私はあなたの実装の詳細を知らないが、私は希望私はBを押してのafer 1秒でBを押しB.Ifを押し、私は= 3

答えて

0

グラムを取得します次に、Aを押してthis exampleをご覧ください。 これを並列(マルチスレッド)で実行しない限り、イベント "Aがプッシュされました"が到着すると、イベントハンドラkeyPressEvent(QKeyEvent *event)にアクションA()が呼び出されます。その場合、アクションA()はイベントループをブロックするため(あなたのケースでは1秒間)、イベント「B was pushed」はA()が終了するまで処理しないでください。このようにしてB()が呼び出されたときにはA()が既に行われています。

+0

あなたのコメントありがとう。私はちょうどメインのthread.should私はスレッドを使用する必要がkeyPressEventを書くか? –

+0

@Moto Jack、これは解答ではありません:) 'B()'が呼び出されたときに 'A()'が終了することを保証するため、 'g'変数が既に変更されていることを保証します。 – WindyFields

+0

ありがとうございます。私はスレッドを使用しようとします –

関連する問題