C++ 98和线程技术

3

我正在使用OpenCV,这是一个开源的图像处理库,由于算法的复杂性,我需要使用多线程来处理视频。

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

有没有天真的方法(不使用任何第三方库)来创建跨平台的多线程应用程序?

3个回答

7

C++98在语言和标准库中都没有支持线程的功能。你需要使用第三方库,你已经列出了一些主要的候选项。


4
OpenCV依赖不同的外部系统进行多线程(或更准确地说是并行处理)。可能的选项包括:
  • OpenMP (在编译器级别处理);
  • Intel's TBB (外部库);
  • libdispatch (在支持它的系统上,如MacOS,iOS,*BSD);
  • 使用CUDA和OpenCL的GPGPU方法。

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

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


我有最新版本2.4.6,感谢你让我了解到opencv具有低级线程支持。然而,与C#线程类似,我需要更高级别的操作。例如,一个线程应该不断地从视频中加载帧,另一个循环应该调用一个处理函数输入一帧。 - baci
1
实际上,您寻找的很可能是平台相关的,因为它与应用程序的运行时有些关联。我猜POSIX、Boost或Qt线程应该可以胜任你的工作。但您无法真正避免引入外部依赖项并同时跨平台。 - sansuiso

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接