0

現在、C++ 98 (Linux OS 上) の OpenCV および Boost ライブラリのおかげで、カメラからいくつかの画像を取得するプログラムをコーディングしています。
Boost::thread で OpenCV のおかげで取得を行います。スレッドは、それを起動する Camera クラスで取得した画像を書き込みます。
すべての OpenCv 部分は完全に機能しますが、boost::threads は非常に奇妙なことを行っており、その理由がわかりません。

問題は、スレッド上のメソッドへの ANY 呼び出しが実行をブロックすることです (get_id( ) など)。

以下は単純化されたコードです (ミューテックスとゲッターはコードを軽くするために書かれていません):

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