C++ 使用boost::thread跨线程锁定网络摄像头帧
我正试图使用boost::lock为相机读取添加线程安全性,但我被卡住了。在框架编写器线程A中,我有: h 这可以编译,但帧是黑色的。我在哪里搞砸了?(我是新手,请原谅我的白痴)C++ 使用boost::thread跨线程锁定网络摄像头帧,c++,multithreading,boost,C++,Multithreading,Boost,我正试图使用boost::lock为相机读取添加线程安全性,但我被卡住了。在框架编写器线程A中,我有: h 这可以编译,但帧是黑色的。我在哪里搞砸了?(我是新手,请原谅我的白痴) 谢谢。它们在线程A中也是黑色的吗?啊,更改w_lock.release()到w_lock.unlock()似乎已经修复了它。谢谢你的时间。哦,对了,接得好。我通常更喜欢使用作用域锁(利用RAII),所以很少需要显式解锁。 #include <boost/thread/locks.hpp> #include
谢谢。它们在线程A中也是黑色的吗?啊,更改
w_lock.release()代码>到w_lock.unlock()代码>似乎已经修复了它。谢谢你的时间。哦,对了,接得好。我通常更喜欢使用作用域锁(利用RAII),所以很少需要显式解锁。
#include <boost/thread/locks.hpp>
#include <boost/thread/shared_mutex.hpp>
#include <boost/system/config.hpp>
typedef boost::shared_mutex Lock;
typedef boost::unique_lock< Lock > WriteLock;
typedef boost::shared_lock< Lock > ReadLock;
Lock OccamLock;
WriteLock w_lock(OccamLock);
//calls frames from camera
cv::Mat f1 = cv::Mat_<uchar>(images[0]->height, images[0]->width, (uchar*)images[0]->data[0], images[0]->step[0]);
f1.copyTo(img0);
w_lock.release();
typedef boost::shared_mutex Lock;
typedef boost::unique_lock< Lock > WriteLock;
typedef boost::shared_lock< Lock > ReadLock;
ReadLock r_lock(oGrab->OccamLock); //oGrab is the reference to the class in Thread A
imgs[0] = oGrab->img0;
r_lock.release();