由于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可以工作,但是我必须优化我的程序,所以我想对线程有完全的控制权。无法正确管理它们令人沮丧。
有人能帮助我吗?