2017-08-25 32 views
0

我已經使用Qkeyevent在QT中定義了關鍵的A和B事件。當我在鍵盤上按A時,會執行花費1秒鐘的過程A()。如果我在鍵盤上按B,它會執行過程B()。我想通過處理A()來更新全局值,並在進程B()中獲取值。然而過程A()花費1秒鐘。如果我這麼快按下B鍵,我會得到錯誤的值。如何等待A過程完成,以便我在QT中快速推B。如何等待keyevent直到在QT中完成進程

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

} 
B() { 
    cout << g; 
} 

首先,我推A,然後按b。如果我在1s內壓入B AFER推B,我會得到G = 3

回答

0

我不知道你的實現細節,但我會建議看看this example。 除非您並行執行此操作(多線程),否則當事件「A被推送」到達時,您將在事件處理函數keyPressEvent(QKeyEvent *event)中調用操作A()。在這種情況下,事件「B被推」不應該被處理,直到A()完成,因爲動作A()會阻止事件循環(在你的情況下1秒)。這樣,當B()被稱爲A()已經完成。

+0

謝謝你的評論。我只是在主線程中寫了keyPressEvent。我應該使用線程嗎? –

+0

@Moto傑克,這不是一個評論的答案:)調用B()時,確保'A()'完成,可以保證'g'變量已經改變。 – WindyFields

+0

謝謝。我會嘗試使用線程 –

相關問題