作者:uw65ayk | 来源:互联网 | 2023-09-23 17:31
问题描述过程1:从相机中获取图像数据,然后存放到一个cv::Mat对象中(该对象是全局变量,用来交换数据)。由相机的回调函数自动调用。过程2:将上述的全局变量拷贝并转换qimg,放
- 问题描述
- 过程1:从相机中获取图像数据,然后存放到一个cv::Mat对象中(该对象是全局变量,用来交换数据)。由相机的回调函数自动调用。
- 过程2:将上述的全局变量拷贝并转换qimg,放到Qt界面上显示。该过程由定时器调用。
- 然后程序会在运行一段时间后,出现“程序异常结束。The process was ended forcefully.”。运行的时间长短不一。
- 问题解决与分析
- 最后测试是否真的是这个原因。声明一个槽函数,连接上某按钮的click动作。调用.clone()并且没有加锁。
void QtGuiApplication1::on_btnThread_clicked()
{
auto myThread = [] {
while (1) {
if (!temp_forSave.empty()) {
Mat lalala = temp_forSave.clone();
std::cout <<"在创建线程中复制\n";
}
std::cout <<"创建线程" <
- 正常运行时,点击按钮程序立即崩溃(毕竟该线程时while(1)地拷贝)。验证成功。
由“Qt程序运行一段时间后崩溃”引发的“opancv库中Mat::clone()函数”在多线程下的注意事项