当前位置: 代码迷 >> QT开发 >> Qt 线程解决思路
  详细解决方案

Qt 线程解决思路

热度:54   发布时间:2016-04-25 03:18:22.0
Qt 线程
mythread.h

#ifndef MYTHREAD_H
#define MYTHREAD_H

#include <QThread>

class MyThread : public QThread
{
    Q_OBJECT
public:
    explicit MyThread(QObject *parent = 0);
    void run();
    bool stop;
signals:

public slots:

};

#endif // MYTHREAD_H

mythread.cpp

#include "mythread.h"
#include <QDebug>
#include <QtCore>

MyThread::MyThread(QObject *parent) :
    QThread(parent)
{
    this->stop = false;
}

void MyThread::run()
{
    qDebug() << "running";

    QMutex mutex;
    mutex.lock();
    for(int i = 0; i < 10; i++){
        if(this->stop)
        {
            break;
        }
        qDebug() << i;
    }
    mutex.unlock();
    qDebug() << "finished";
}


main.cpp

#include <QCoreApplication>
#include "mythread.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    MyThread mThread;

    mThread.start();

    mThread.stop = true;

    return a.exec();
}

疑问:mThread.start()调用了run()之后,怎么就在循环里break了?mThread.stop = true;不是在mThread.start();之后才赋值为true吗?这执行顺序不太懂~求解~
------解决方案--------------------
引用:
疑问:mThread.start()调用了run()之后,怎么就在循环里break了?mThread.stop = true;不是在mThread.start();之后才赋值为true吗?这执行顺序不太懂~求解~


你是在start() 之后,设置的stop的值。

但是,此时次线程,run有没有运行,运行到哪一步,你完全不知道啊。另外,你run的那个mutex完全没有用,你原本是准备做什么用的呢?
------解决方案--------------------
start调用run是一个异步过程,start调用的时候,线程仍然处于就绪状态。
而主程序不会被阻塞,
所以你的 mThread.stop = true;
会在run方法执行之前执行
  相关解决方案