我目前正在编写一个程序来从相机获取一些图像,这要归功于 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 方法中的连接,程序可以工作,但我必须优化我的程序,所以我想完全控制线程。无法正确管理它们令人沮丧。
有人能帮助我吗 ?