标签:cat 准备 按钮 auto image this 访问 _id ret
inline
Mat Mat::clone() const
{
Mat m;
copyTo(m);
return m;
}
// 噢 原来是调用的cv::copyTo方法,等等,上面有个const,这下明白了,在拷贝的时候是不允许修改值的,如果正在拷贝,此时相机写入线程正好获取了相机数据,准备写入,这时就发生了冲突。总之读写不能同时进行。
//那么就是用互斥量将两者互斥,
#include <mutex>
std::mutex mtx;
//在读(Mat::clone()) / 写 之前使用mtx.lock();,之后使用mtx.unlock(); 问题解决啦。
void QtGuiApplication1::on_btnThread_clicked()
{
auto myThread = [] {
while (1) {
if (!temp_forSave.empty()) {
Mat lalala = temp_forSave.clone();
std::cout << "在创建线程中复制\n";
}
std::cout << "创建线程" << std::this_thread::get_id() << "运行" << endl;
}
};
std::thread a(myThread);
a.join();
}
由“Qt程序运行一段时间后崩溃”引发的“opancv库中Mat::clone()函数”在多线程下的注意事项
标签:cat 准备 按钮 auto image this 访问 _id ret
原文地址:https://www.cnblogs.com/neoLin/p/11577345.html