0

我目前正在编写一个程序来从相机获取一些图像,这要归功于 C++98 中的 OpenCV 和 Boost 库(在 Linux 操作系统上)。
感谢 OpenCV 在 boost::thread 中的收购。线程写入在启动它的 Camera 类中获取的图像。
所有 OpenCv 部分都运行良好,但 boost::threads 正在做一些非常奇怪的事情,我不知道为什么。

问题是对线程上的方法的任何调用都会阻塞执行(例如 get_id())。

这是一个简化的代码(mutex 和 getter 不是为了简化代码而编写的):

class Camera {
  private :
    bool isRunning_;
    boost::thread* acquisitionThread_;
    cv::Mat image_;

  public :
    Camera(){}

    void start() {
      isRunning_ = true;
      acquisitionThread_ = new boost::thread(&Camera::run(), this);
      // If i try to call a method on thread_ it blocks.
    }

    void stop() {
      isRunning_ = false;
      acquisitionThread_->join();
      // For example, join() is blocking the execution.
    }

    void run() {
      while (getIsRunning()) {
        // Do some aquisition and write it in image_
      }
    }
}

int main(int argc, char *argv[])
{
  Camera cam;
  cam.start();
  // Getting the images acquired in the camera class in a loop and display it
  cam.stop();
  return 0;
}

如果我删除 stop 方法中的连接,程序可以工作,但我必须优化我的程序,所以我想完全控制线程。无法正确管理它们令人沮丧。

有人能帮助我吗 ?

4

0 回答 0