萱草C 2022-11-12 00:29 采纳率: 100%
浏览 27
已结题

QMutex 的lock()暂停不住线程

问题遇到的现象和发生背景

我想使用QMutex来实现线程的暂停和继续,但是调用lock()线程却还在继续跑。

用代码块功能插入代码,请勿粘贴截图

void videoPlayThread::run()
{
    Mat frame;
    while(this->stop==0)
    {

        if(cap.read(frame))
        {
            this->curFrame++;
            qDebug()<<this->curFrame;
            if(save==1)
            {
                emit sendSave(frame);
                this->save=0;
            }
            emit sendMat(frame);
            msleep(20/speed);
        }

    }
    qDebug()<<"over";
    cap.release();
}


void videoPlayThread::Pause()
{
    this->mutex->lock();
    this->pause=1;
    qDebug()<<"pause";
}

void videoPlayThread::Resume()
{
    this->mutex->unlock();
    this->pause=0;
    qDebug()<<"play";
}

void videoPlayThread::setPause()
{
    if(this->pause==0)
    {
        this->Pause();

    }
    else
    {
        this->Resume();
    }

}
运行结果及报错内容

调用Pause()和Resume()的时候都有打印出pause 和play但是线程却没有停下来

  • 写回答

2条回答 默认 最新

  • mideum 2022-11-14 11:16
    关注

    要去lock已经被lock住的mutex线程才会停,而且如果lock真的让线程停了,你后面的pause=1和qDebug在线程继续前根本不会执行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月28日
  • 已采纳回答 11月20日
  • 修改了问题 11月12日
  • 创建了问题 11月12日

悬赏问题

  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥15 关于超局变量获取查询的问题
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集
  • ¥15 在启动roslaunch时出现如下问题
  • ¥15 汇编语言实现加减法计算器的功能
  • ¥20 关于多单片机模块化的一些问题
  • ¥30 seata使用出现报错,其他服务找不到seata