在OSX上使用Boost线程时访问摄像头时出现问题

时间:2011-03-04 21:06:33

标签: c++ opencv osx-snow-leopard boost-thread

我正在尝试使用OpenCV打开相机。这在我在主线程中打开相机时工作正常,但是当我尝试在Boost线程中打开相机时,它会失败。我没有能够谷歌为什么会这样。我认为它与Boost线程的权限有某种关系。

以下工作正常:

#include <cv.h>
#include <boost/thread.hpp>
#include <highgui.h>

using namespace cv;
void openCamera() {
    Ptr< VideoCapture > capPtr(new VideoCapture(0)); // open the default camera
}

int main() {
    openCamera();
}

然后我的相机会短暂打开,之后我会收到“清理相机”的消息。

但是当我通过Boost线程尝试相同时,它不会打开相机:

#include <cv.h>
#include <boost/thread.hpp>
#include <highgui.h>
#include <iostream>

using namespace cv;
void openCamera() {
    std::cout << "confirming that openCamera() was called" << std::endl;
    Ptr< VideoCapture > capPtr(new VideoCapture(0)); // open the default camera
}

int main() {
    boost::thread trackerThread( boost::bind(openCamera) );
}

打印“确认openCamera()被调用”,但相机从未打开,并且没有“清理相机”消息。

我有什么方法可以解决它吗?

谢谢!

1 个答案:

答案 0 :(得分:7)

我不使用boost很多,但是你不需要做一些事情来保持main()在你的线程工作时退出吗?就像也许......

int main() {
    boost::thread trackerThread( boost::bind(openCamera) );
    trackerThread.join();
}