对boost :: thread的方法调用会阻止执行

时间:2013-11-08 15:25:18

标签: c++ multithreading boost

由于OpenCV和C ++ 98中的Boost库(在Linux操作系统上),我正在编写一个程序来从相机中获取一些图像。
感谢Open ::在boost :: thread中进行收购。该线程会写入在启动它的Camera类中获取的图像 所有的OpenCv部分都运行得很好,但是boost :: threads正在做一些非常奇怪的事情,我无法弄清楚为什么。

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

这是一个简化的代码(不会编写互斥和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方法中删除了join,那么programm可以工作,但是我必须优化我的程序,所以我想对线程有完全的控制权。无法正确管理它们令人沮丧。

有人能帮助我吗?

0 个答案:

没有答案