Qt线程的一些控制方法.md

公众号:Qt那些事儿

公众号

需求

基于上一篇文章的例子,我们来做一些控制的操作,比如暂停,停止,继续这些操作。

五个控制

  • Start 开始线程
  • Stop 结束线程
  • Pause 暂停线程
  • Continue 继续线程
  • Destory 毁灭线程

新增加的三个

上一篇,我们已经有了开始线程跟Destory。现在添加新的三个

  • 结束线程
  • 暂停线程
  • 继续线程

代码

talk is cheap。还是上代码吧,很简单。

void WorkThread::Start()
{
    m_bStop = false;
    emit workStart();
    doWork();
    emit workStop();
}
void WorkThread::doWork()
{
    while(true)
    {
        if (m_bPause)
        {
            emit workPause();
            continue;
        }

        if (m_bStop)
        {
            emit workStop();
            break;
        }

        if (m_bDestory)
        {
            emit workDestory();
            break;
        }

#ifdef Q_OS_WIN
        Sleep(1000);
#else
        sleep(1);
#endif
        qDebug()<<"--"<<m_i<<endl;
        m_i++;
    }
}

void WorkThread::Stop()
{
    m_bStop = true;
}

void WorkThread::Pause()
{
    m_bPause = true;
}

void WorkThread::Continue()
{
    m_bPause = false;
}

void WorkThread::Destory()
{
    m_bDestory = true;
}

上面的代码为控制线程的函数,下面是UI线程通过信号槽来控制代码


    m_workerThread = new QThread();
    m_worker = new WorkThread();
    m_worker->moveToThread(m_workerThread);

    connect(ui->btnPause, &QPushButton::clicked, this, &MainWindow::ThreadPause, Qt::DirectConnection);
    connect(ui->btnContinue, &QPushButton::clicked, this, &MainWindow::ThreadContinue ,Qt::DirectConnection);
    connect(ui->btnStop, &QPushButton::clicked, this, &MainWindow::ThreadStop, Qt::DirectConnection);
    connect(ui->btnDestory, &QPushButton::clicked, this, &MainWindow::ThreadDestory, Qt::DirectConnection);

    //启动线程
    connect(ui->btnStart, &QPushButton::clicked, this, &MainWindow::ThreadStart);
    connect(m_workerThread, &QThread::started, m_worker, &WorkThread::Start);
    //stop之后继续走
    connect(this, &MainWindow::threadStart, m_worker, &WorkThread::Start);


你会发现我的控制全部使用信号槽来进行线程之间的通信。

上面的代码只是一个简单的例子,全部的工程代码都在这里。

https://github.com/CryFeiFei/Qt_Teach/tree/master/Qt_Teach/Thread3

公众号:Qt那些事儿

公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值