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吗?这执行顺序不太懂~求解~
------解决方案--------------------
你是在start() 之后,设置的stop的值。
但是,此时次线程,run有没有运行,运行到哪一步,你完全不知道啊。另外,你run的那个mutex完全没有用,你原本是准备做什么用的呢?
------解决方案--------------------
start调用run是一个异步过程,start调用的时候,线程仍然处于就绪状态。
而主程序不会被阻塞,
所以你的 mThread.stop = true;
会在run方法执行之前执行