• QT 多线程学习


    1、定义一个MyThread类,让其继承QThread,然后重新实现QThread::run()。

        /*定义QThread子类*/
        #ifndef MYTHREAD_H
        #define MYTHREAD_H
        
        #include <QThread>
        
        class MyThread : public QThread
        {
            Q_OBJECT
        public:
            explicit MyThread(QObject *parent = 0);
            ~MyThread();
        protected:
            //QThread的虚函数
            //线程处理函数
            //不能直接调用,通过start()间接调用
            void run();
        signals:
            void isDone();  //处理完成信号
        };
        #endif // MYTHREAD_H
        
        /*使用代码*/
        MyThread myThread;
        myThread.start(); //run()函数将会在线程中被执行
        myThread.run(); //run()函数将不会在线程中被执行

    2、新建一个线程继承自QObject的线程类,在外部调用其实例的moveToThread(QThread对象)函数,传入一个QThread对象(或QThread公有继承子类对象)的地址作为该函数的参数。然后通过QThread对象的start()函数启动线程,则此实例中的槽函数都在QThread对象线程中执行。

        QThread m_tcpThread; //创建QThread实例
        TcpServer* m_tcpServer = new TcpServer(); //继承自QObject的线程类实例化
        m_tcpServer->moveToThread(&m_tcpThread);//将m_tcpServer加入m_tcpThread线程中
        m_tcpThread.start(); //启动线程之后,m_tcpServer中的槽函数都将在线程中执行

    3、使用C++的thread类对象调用成员函数。

        //不含有参数的函数调用
        std::thread parseThread(&Parser::_parseData, this); //类::独立线程的函数名,this指针
        parseThread.join(); //join()函数被调用后,调用它的线程会被block,直到线程的执行被完成。
        //含有参数的函数调用
        std::thread myThread(&Pack2System::_getUisystemById, this, 1);//类::独立线程的函数名,this指针,实际参数
        myThread.detach();//detach()函数被调用后,执行的线程从线程对象中被分离,已不再被一个线程对象所表达--这是两个独立的事情。
    坚持成就伟大
  • 相关阅读:
    [Android] 布局优化技巧
    [Android] 仿照 Last App Switcher 写的小程序
    [Java] 用 Comparator 实现排序
    [Android] Service服务详解以及如何使service服务不被杀死
    [MarkDown] markdown语法小结
    [Android] TextView长按复制实现方法小结(转载)
    [Android] 关于系统工具栏和全屏沉浸模式
    [Android] 锁定屏幕
    [Android] 针对生成的图片文件在系统Gallery不显示的处理
    [Android] TableLayout
  • 原文地址:https://www.cnblogs.com/xian-yongchao/p/15335562.html
Copyright © 2020-2023  润新知