class QThread :public Qt
{
// .......
// .......
protected:
virtual void run() = 0;
// .......
// .......
};
ps:面向对象程序设计实践的早起,工程中习惯于通过继承的方式扩展系统的功能。
参考准则:
·尽量使用组合的方式实现系统功能
·代码中仅体现需求中的继承关系
通过继承的方式实现新的线程类,有什么实际意义?
-通过继承的方式实现多线程没有任何实际意义
-QThread对应操作系统中的线程
-QThread用于充当一个线程操作的集合
-应该提供灵活的方式指定线程入口函数
-尽量避免重写void run()
QThread类的改进
class QThread : public QObject
{
Q_OBJECT
// ......
protected:
virtual void run()
{
(void)exec();
}
// ......
}
如何灵活的指定一个线程对象的线程入口函数?
解决方案 - 信号与槽
-在类中定义一个槽函数 void tmain() 作为线程入口函数
-在类中定义一个QThread成员对象m_thread
-改变当前对象的线程依附性到m_thread
-连接m_thread的start() 信号到tmain()
总结:
-早期的Qt版本只能通过继承的方式创建线程
-现在软件技术提倡以组合的方式代替继承
-QThread应该作为线程操作集合而使用
可以通过信号与槽的机制灵活指定线程入口函数