C++对象有声明周期;
线程也有声明周期;
QThread对象的生命周期与对应的线程声明周期是否一致?
线程对象生命周期 > 对应的线程声明周期
同步型线程设计
-概念
·线程对象主动等待线程生命期结束后才销毁
-特点
·同时支持栈和堆中创建线程对象
·对象销毁时确保线程生命期结束
-要点
·在析构函数中先调用wait()函数,强制等到线程运行结束
-使用场合
·线程生命期相对较短的情形
FuncThread::~FuncThread()
{
wait();
// do something to release resource
}
异步型线程设计
-概念
·线程生命期结束时通知销毁线程对象
-特点
·只能在堆中创建线程对象
·线程对象不能被外界主动销毁
-要点
·在run() 中最后调用deleteLater() 函数
·线程体函数主动申请销毁线程对象
-使用场合
·线程生命期不可控,需要长时间运行于后台的情形
void FuncThread::run()
{
for(int i = 0; i < 5;i++)
{
//do something complicated
}
//apply to destory thread object
deleteLater();
}
总结:
线程对象生命期必须大于对应线程生命期
-同步型线程设计-->线程生命期较短
-异步型线程设计-->线程生命期不可控
-线程类的设计必须适应具体的场合
-没有万能的设计,只有合适的设计