2013-07-18 52 views
2

我正在使用OpenCV,一个开源的图像处理库,并且由于我算法的复杂性,我需要使用多个线程进行视频处理。C++ 98和线程

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

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

回答

4

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

  • OpenMP(在编译器级处理);
  • Intel's TBB(外部库);
  • libdispatch(支持它的系统,如MacOS,iOS,* BSD);
  • GPGPU与CUDA和OpenCL接近。

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

+0

我有最新版本2.4.6,感谢你我刚刚了解到opencv具有低级别的线程支持。但是,类似于C#线程,我需要更高级别的操作。例如,一个线程应该连续地从视频中加载帧,另一个循环应该调用输入帧的处理函数。 – baci

+1

然后的确,你要找的东西很可能是平台相关的,因为它在某种程度上与运行时你的应用。我猜,POSIX,Boost或Qt线程应该为你做正确的工作。但是你不能真正避免引入外部依赖并且同时要跨平台。 – sansuiso

7

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

2

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