我已经实现了从网络摄像头检索帧的Cam类。 Cam类有自己的获取帧的线程。代码运行顺利。我想要做的是实现能够在适当的小部件中显示帧的GUI类。成员数据m_frame
保存当前图像,应该可以从两个独立的线程访问它。我的问题是我应该在哪里使用mutex
安全地访问框架?是否足以在getFrame()
使用它,如下所示:
cv::Mat Cam::getFrame()
{
std::lock_guard<std::mutex> lock(mtx)
return m_frame;
}
或者在独立线程中修改m_frame的位置如下:
void Cam::getFrameFromCam()
{
// Independent Thread
while( m_isCamThreadRunning ){
if ( m_isCamOpen ){
std::lock_guard<std::mutex> lock(mtx);
// acquire frame
*cap >> m_frame;
}
}
}
答案 0 :(得分:0)
在不知道m_frame
的确切工作原理的情况下,我建议您传递给getFrame()
对可以容纳m_frame
的对象的引用,并且可以安全地使用std::lock_guard
- 将其复制到提供的参考文献中。
东西 - 抽象代码 - 像这样[我对复制cv::Math
]一无所知:
cv::Mat & Cam::getFrame( cv::Math & myCopyOfFrame )
{
std::lock_guard<std::mutex> lock(mtx);
myCopyOfFrame = m_frame;
return myCopyOfFrame;
}