2010-09-06 24 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接口的薄包装器)。