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

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 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?