Qt 笔记:另一种创建线程的方式

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应该作为线程操作集合而使用

可以通过信号与槽的机制灵活指定线程入口函数

另一个种创建线程的方式

猜你喜欢

转载自blog.csdn.net/qq_29962483/article/details/83012361