从主线程中创建了两个线程 - qthread

时间:2013-10-11 08:04:03

标签: qt qthread

我在linux的主线程中创建了两个线程但是如何在QT中创建它们?

我的GUI有两个按钮start&停。 我希望当按下开始按钮时,主线程开始&它启动两个线程TX& RX。 当按下停止按钮时,tx线程停止,然后接收线程停止&然后主线程停止。

我需要从主线程创建两个线程(TX / RX)。 请建议如何填写我的代码。

  1. 我是否必须为tx / rx thread&创建单独的对象然后将这些对象移动到相应的Qthread m_preceiveThread,m_pwriteThread?
  2. 还有哪一点应该是tx&创建rx线程(我应该在主线程对象的构造函数中创建它们)?
  3. 当按下按钮时应该使用什么逻辑来停止线程(我们主要使用设置一个标志来控制线程工作函数)?
  4. 当dowork()函数结束时,线程会终止吗?
  5. 我创建了两个Qthread QThread m_preceiveThread;& QThread m_pwriteThread;对象中的deviceThreadObject,是否是我将从主线程开始创建线程的正确位置?
  6. 6.在将movetothread函数应用于主线程之前。我是否必须准备tx&主线程对象deviceThreadObject m_deviceThreadObject;的构造函数中的rx线程,或者在线程启动时触发的slot()中的rx线程。

    创建线程:

    QThread m_deviceThread;
    deviceThreadObject m_deviceThreadObject;
    connect(&m_deviceThread,SIGNAL(started()),m_deviceThreadObject,SLOT(dowork()));
    m_deviceThreadObject.moveToThread(&m_deviceThread);
    

    Tx / Rx线程对象:

    /// forward declarations
    class deviceThreadObject;
    
    // transmit & receive thread object
    class txRxThreadObject : public QObject
    {
        Q_OBJECT
    public:
        explicit txRxThreadObject(QObject *parent = 0);
    
        deviceThreadObject *m_pMainThreadObj;
    
        /* Termination control  thread*/
        bool m_bQuitRx;
        bool m_bQuitTx;
    
    signals:
    
    public slots:
        void dowork_tx();
        void dowork_rx();
    
    };
    

    主设备线程对象:

    class deviceThreadObject : public QObject
    {
        Q_OBJECT
    public:
        explicit deviceThreadObject(QObject *parent = 0);
    
        QThread m_preceiveThread;
        QThread m_pwriteThread;
    
        bool m_bQuit;
    
        /// Pointer to QStandardItemModel to be used inside - canTableView
        QStandardItemModel *modeltable;
    
        /// pointer to the txRxThreadObject  object
        class txRxThreadObject *m_ptxRxThreadObject;
    
        /// setup function for device thread
        void dosetup(QThread &devThread);
    
    signals:
    
    public slots:
        void dowork()
        {     
           for(int i=0; i<100; i++)
           {
               qDebug() << "hello";    
           }    
        }
    
    
    };
    

0 个答案:

没有答案