我正在开发一个使用DirectShow / COM进行捕获的小项目,当我的应用程序获取成像数据时,DShow使用自己的线程进行回调。
我也在我的项目中使用Qt,我想使用Qt进行同步和线程安全。我想知道在这种情况下如何使用Qt Threads。
我知道我也可以使用Win32的CriticalSection函数,但是这会使我的代码更难移植到其他平台(因为DShow的东西是我项目中唯一的Windows特定代码)。
我的问题是:“在使用非Qt线程时如何使用Qt的线程安全功能?”
答案 0 :(得分:3)
(免责声明:我自己没有使用过QT主题。 - 但我在这里交叉检查了我的QtCreator上的来源。)
通过查看http://doc.qt.nokia.com/4.6/threads.html#the-threading-classes以及我对其他线程库的经验,我会说你可以安全地使用所有的线程结构(QMutex,QMutexLocker,...还有QFuture,......)不依赖于他们“操作”的线程的QThread对象的存在。也就是说,安全地使用你的一个COM线程。
关于如何:无论你是通过QThread启动线程还是COM线程,QMutex类都将使用完全相同的。那是因为它必须直接使用底层操作系统线程支持,并不需要通过QThread对象创建的线程。
由于你提到了关键部分:Qt“only”似乎实现了一个通用的QMutex类。关于功能我觉得这非常好。在一个重度多线程的应用程序中,由于性能原因,它可以(可能!)直接使用win32 CriticalSections(通过带有QMutex接口的瘦包装器)。