2010-09-06 22 views
2

我正在研究一個使用DirectShow/COM進行捕獲的小項目,當我的應用程序獲取映像數據時,DShow使用自己的線程進行回調。將Qt線程與COM線程混合使用

我也在我的項目中使用Qt,我想使用Qt進行同步和線程安全。我想知道如何在這種情況下使用Qt線程。我知道我也可以使用Win32的CriticalSection函數,但這會讓我更難將代碼移植到其他平臺(因爲DShow是我項目中唯一的Windows特定代碼)。

我的問題是:「如何在使用非Qt線程時使用Qt的線程安全功能?」

回答

2

(免責聲明:。沒有使用QT線程自己 - 但我在這裏交叉檢查我的QtCreator來源)

通過觀察http://doc.qt.nokia.com/4.6/threads.html#the-threading-classes從我與其他線程庫的經驗,我會說,你可能可以安全地使用所有線程結構(QMutex,QMutexLocker,...還有QFuture,...),這些線程結構不依賴QThread對象的存在作爲它們「操作的線程」。也就是說,安全地使用你的COM線程之一。

關於如何:無論您是通過QThread啓動線程還是COM線程,QMutex類都將完全相同。這是因爲它必須直接使用底層的OS線程支持,並不需要通過QThread對象創建的線程。

既然你提到了關鍵部分:Qt「only」似乎實現了一個通用的QMutex類。關於功能,我猜這是非常好的。在大量多線程應用程序中,出於性能考慮,它可能(可能爲!)爲了性能原因直接使用win32 CriticalSections(通過帶有類似QMutex接口的薄包裝器)。