我正在使用开源图像处理库OpenCV,由于我的算法很复杂,我需要使用多个线程进行视频处理。
如何在C ++ 98上进行多线程处理?我知道C ++ 11有一个用于线程的内置支持库(std :: thread)但我的平台(MSVC ++ 2010)却没有。我还读到了Boost库,它是C ++ STL的通用扩展,具有多线程的方法。我也知道MSDN支持(windows.h)我可以为Windows应用程序创建和管理线程。最后,我发现Qt library是一个跨平台的GUI解决方案,支持线程化。
是否有一种天真的方式(没有任何第三方库)来创建跨平台的多线程应用程序?
答案 0 :(得分:7)
C ++ 98在语言和标准库中都没有任何线程支持。您需要使用第三方库,并且您已经列出了一些主要候选人。
答案 1 :(得分:4)
OpenCV依赖于不同的外部系统进行多线程处理(或更准确地说是并行处理)。 可能的选择是:
在OpenCV的最新版本中,这些系统是隐藏的"在parallel_for构造后面。
所有这些都适用于并行处理,即数据并行任务(粗略地说,并行处理输入的每个像素或行)。如果您需要应用程序级多线程(例如,拥有主线程和工作线程),那么您需要使用POSIX的线程或Qt等框架。
答案 2 :(得分:2)
我推荐boost::thread
,它(大部分)与C ++ 11中的std::thread
兼容。它是跨平台的,非常成熟
OpenCV的并行性是内部的,并不直接与您的代码混合,但它可能会使用比您预期更多的资源和内核(作为一项功能),但这可能会牺牲其他外部进程。