3

我正在使用开源图像处理库 OpenCV,由于我的算法很复杂,我需要使用多个线程进行视频处理。

在 C++ 98 上如何实现多线程?我知道 C++ 11 有一个内置的线程支持库(std::thread),但我的平台(MSVC++ 2010)没有。我还阅读了Boost库,它是 C++ STL 的通用扩展,具有多线程方法。我还知道通过MSDN支持 (windows.h) 我可以为 Windows 应用程序创建和管理线程。最后,我发现Qt 库,一个跨平台的 GUI 解决方案,支持线程。

是否有一种天真的方式(没有任何 3rd 方库)来创建跨平台多线程应用程序?

4

3 回答 3

7

C++98 在语言和标准库中都不支持线程。您需要使用第三方库,并且您已经列出了一些主要候选人。

于 2013-07-18T10:43:59.310 回答
4

OpenCV 依赖于不同的外部系统进行多线程(或更准确地说是并行处理)。可能的选项是:

  • OpenMP(在编译器级别处理);
  • Intel 的 TBB(外部库);
  • libdispatch(在支持它的系统上,如 MacOS、iOS、*BSD);
  • 使用 CUDA 和 OpenCL 的 GPGPU 方法。

在 OpenCV 的最新版本中,这些系统“隐藏”在parallel_for构造后面。

所有这些都适用于并行处理,即数据并行任务(粗略地说,并行处理输入的每个像素或行)。如果您需要应用程序级别的多线程(例如拥有主线程和工作线程),那么您需要使用诸如 POSIX 线程或 Qt 之类的框架。

于 2013-07-18T11:17:44.220 回答
2

我推荐boost::thread哪个(大部分)与std::threadC++11 兼容。它是跨平台的并且非常成熟。
OpenCV 的并行性是内部的,不会直接与您的代码混合,但它可能会使用比您预期的更多的资源和内核(作为一项功能),但这可能会以牺牲其他外部进程为代价。

于 2013-07-18T14:00:07.840 回答