萱草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日

悬赏问题

  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?