2013-07-18 93 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的並行性是內部的,並不直接與您的代碼混合,但它可能會使用比您預期的更多的資源和內核(作爲一項功能),但這可能會犧牲其他外部進程。