Проблема с доступом к камере при использовании Boost-потока в OSX - PullRequest
4 голосов
/ 05 марта 2011

Я пытаюсь использовать OpenCV, чтобы открыть камеру.Это прекрасно работает, когда я открываю камеру в главном потоке, но когда я пытаюсь открыть камеру в потоке Boost, это не удается.Я не смог Google, почему это происходит.Я предполагаю, что это как-то связано с разрешениями потока 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 Ответ

7 голосов
/ 12 мая 2011

Я не часто использую boost, но разве вам не нужно что-то делать, чтобы препятствовать выходу main () во время работы вашего потока? Как может быть ...

int main() {
    boost::thread trackerThread( boost::bind(openCamera) );
    trackerThread.join();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...