我正在使用OpenCV,一个开源的图像处理库,由于我的算法很复杂,我需要使用多个线程进行视频处理。
在C++ 98上是如何实现多线程的?我知道C++ 11有一个内置的线程支持库(std::thread),但我的平台(MSVC++ 2010)没有。我还了解到Boost库,它是C++ STL的通用扩展,具有多线程的方法。我还知道,有了MSDN支持(windows.h),我可以为Windows应用程序创建和管理线程。最后,我发现Qt library,一个跨平台的图形用户界面解决方案,支持线程。
有没有一种天真的方法(没有任何第三方库)来创建跨平台多线程应用程序?
发布于 2013-07-18 19:17:44
OpenCV依赖于不同的外部系统进行多线程(或者更准确地说,并行处理)。可能的选项包括:
在最近的OpenCV版本中,这些系统被“隐藏”在parallel_for构造后面。
所有这些都适用于并行处理,即数据并行任务(粗略地说,并行处理输入的每个像素或行)。如果您需要应用程序级别的多线程(例如,拥有主线程和工作线程),那么您需要使用诸如POSIX的线程或Qt之类的框架。
发布于 2013-07-18 18:43:59
无论是在语言中还是在标准库中,C++98都不支持线程。您需要使用第三方库,并且您已经列出了许多主要候选者。
发布于 2013-07-18 22:00:08
我推荐boost::thread,它在C++11中(大部分)与std::thread兼容,它是跨平台的,非常成熟。
OpenCV的并行性是内部的,不会直接与您的代码混合,但它可能会使用比您预期的更多的资源和内核(作为一个特性),但这可能会以牺牲其他外部进程为代价。
https://stackoverflow.com/questions/17721236
复制相似问题