zoukankan      html  css  js  c++  java
  • 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()函数被调用后,执行的线程从线程对象中被分离,已不再被一个线程对象所表达--这是两个独立的事情。
    坚持成就伟大
  • 相关阅读:
    p4 view mapping及其特殊字符
    Build Release Blogs
    Linux技术blogs
    为什么使用tmux
    linux下安装wine
    PythonDjango的windows环境
    tmux安装
    基于云端的开发平台Team Foundation Service
    linux网络配置之setup命令
    Centos6.2设置静态ip和dns
  • 原文地址:https://www.cnblogs.com/xian-yongchao/p/15335562.html
Copyright © 2011-2022 走看看