我有一個困擾了我很長一段時間的設計問題。基本上我有一個需要很長時間才能執行的函數和一個需要響應和最新的gui。當用戶點擊開始按鈕時,long函數開始在while循環中執行,每次執行後gui都需要更新。Qt線程同步設計
我在想這樣做的最好方法是讓QThread在while循環中運行,並且如果用戶按下開始按鈕,long函數將開始執行。類似以下內容:
class Application : public QThread
{
void run (void)
{
while (!mExiting)
{
if (StartPressed)
LongFunction();
// Need to update gui before
// running long function again
}
}
}
我想這樣做QMetaObject ::與BlockingQueuedConnection但是調用,當GUI應用程序退出,線程卡住,永不退出。我也嘗試過使用QMutex,但是,gui會變成鎖定狀態,等待鎖定並由長功能使用的互斥鎖。
我在想,有什麼辦法可以在應用程序想要退出時取消BlockingQueuedConnection,或者有其他方法來實現這一點。
這解決了我所有的問題! – Dave