应用场景:
为了不使页面卡顿,对于耗时的计算,我们往往都放在非主线程中进行。
---------------------------
很多东西都可以再往下深挖一点点
---------------------------
#ifndef TASK_H
#define TASK_H
#include <QThread>
class task : public QThread
{
Q_OBJECT
public:
task();
~task();
void startTask();
void stopTask();
private:
void run();
private:
bool mIsStop;
};
#endif // TASK_H
#include "task.h"
task::task()
: mIsStop(false)
{
}
task::~task()
{
stopTask();
}
void task::startTask()
{
if(!isRunning())
{
start();
}
}
void task::stopTask()
{
if(isRunning())
{
mIsStop = true;
wait();
}
}
void task::run()
{
//耗时操作
while(!mIsStop)
{
}
}
阻塞线程直到下面的情况之一出现:
(1)与QThread对象相关联的线程已经结束运行(即当它从run()中返回时)
这个函数将返回true如果这个线程已经结束。它也返回true如果该线程还没有开始。
(2)deadline到达了。函数返回false如果dealine到达了。
---------------------
deadline 定时器设为QDeadlineTimer::Forever(默认)将从不会超时,在这种情况下,该函数只在线程从run()函数返回时结束,或者线程还没开始。
这提供了类似于POSIX中pthread_join()函数的功能。