我在linux的主线程中创建了两个线程但是如何在QT中创建它们?
我的GUI有两个按钮start&停。 我希望当按下开始按钮时,主线程开始&它启动两个线程TX& RX。 当按下停止按钮时,tx线程停止,然后接收线程停止&然后主线程停止。
我需要从主线程创建两个线程(TX / RX)。 请建议如何填写我的代码。
QThread m_preceiveThread;
& QThread m_pwriteThread;
对象中的deviceThreadObject
,是否是我将从主线程开始创建线程的正确位置? 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";
}
}
};