2014-04-01 98 views
1

當使用pthread(或QThread with moveThread函數)來讀取數據(與互斥體)GUI減慢。Qt - 緩慢的GUI - 線程

爲什麼?

GUI線程和pthread worker(或Qthread)是兩個不同的線程吧?

確切的說,GUI不讀取/寫入任何數據,所以它們是兩個過程不相關的。

爲什麼會出現這個問題?

(上面的例子pthred工人,而創建GUI對話與Qt Creator的簡單,住在主線程)

void* task_camera_notifier(void*) 
{ 
    while(AppState::is_left_camera_in_grabbing && AppState::is_right_camera_in_grabbing) 
    { 
     camera_data left_data; 
     SharedData::SecureAccess_get_leftCameraFrame(left_data); 
    } 

    return NULL; 
} 
+0

你必須提供一些代碼。 –

+0

很可能你在使用線程間通信的時候搞砸了一些東西。用Profiler運行並檢查主線程大部分時間在哪裏,我非常確定它會在某些互斥量或信號量上等待。 –

+0

您應該首先在單線程測試應用程序中運行此操作,並驗證所有攝像頭幀抓取操作實際執行的時間。這應該是一個起點。 –

回答

0

SharedData::SecureAccess_get_leftCameraFrame(left_data);似乎是一個非常沉重的操作我(可能需要在圖像中讀從相機可以很大,然後複製它的對象)。然後在剛剛讀入數據後,left_data超出範圍,圖像被刪除。然後再一次,再一次。儘量在這個while循環中包含一個小的睡眠,這樣它就不會吃掉所有的系統資源。

最終目標:你想達到什麼目標?

+0

感謝您的支持,我的目標是抓住立體相機的一個線程左右圖像,並在其他線程(GUI)中可視化數據。左右數據由QMutex保護。現在,如果嘗試創建讀取圖像的線程,我的GUI(例如對話框中包含更多選項卡)會減慢很多 – user2543127

+0

您是否真的需要在線程中執行此操作?您試圖捕捉的圖像有多大? – fritzone

+0

1280x1024。如果圖像是大量數據的RAW RGB(3MB),我需要創建立體相機的實時圖像查看器(左側和右側) – user2543127