从主线程-qthread中创建了两个线程
我已经在linux的主线程中创建了两个线程,但是如何在QT中创建它们呢 我的GUI有两个启动和停止按钮。 我想,当启动按钮按下,然后一个主线程开始&它启动两个线程发送和接收。 当按下停止按钮时,tx线程停止,然后接收线程停止,然后主线程停止 我需要从一个主线程创建两个线程(TX/RX)。 请建议如何完成我的代码从主线程-qthread中创建了两个线程,qt,qthread,Qt,Qthread,我已经在linux的主线程中创建了两个线程,但是如何在QT中创建它们呢 我的GUI有两个启动和停止按钮。 我想,当启动按钮按下,然后一个主线程开始&它启动两个线程发送和接收。 当按下停止按钮时,tx线程停止,然后接收线程停止,然后主线程停止 我需要从一个主线程创建两个线程(TX/RX)。 请建议如何完成我的代码 我是否必须为tx/rx线程创建单独的对象,然后将这些对象移动到各自的Qthread m_precivethread、m_pwriteThread 还应该在哪个点创建tx和rx线程(我应该
Qthread m_precivethread代码>&QThread m_pwriteThread
在deviceThreadObject
对象中,是否有从主线程开始的线程
movetothread
函数应用于我的主线程之前。我是否必须在主线程对象deviceThreadObject m_deviceThreadObject的构造函数中准备tx和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";
}
}
};
主设备线程对象:
/// 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";
}
}
};
class deviceThreadObject:公共QObject
{
Q_对象
公众:
显式deviceThreadObject(QObject*parent=0);
QThread m_前向线程;
QThread m_pwriteThread;
布尔穆布奎特;
///指向要在内部使用的QStandardItemModel的指针-canTableView
QStandarItemModel*模型表;
///指向txRxThreadObject对象的指针
类txRxThreadObject*m_ptxRxThreadObject;
///设备线程的设置函数
void dosetup(QThread和devThread);
信号:
公众时段:
无效销钉()
{
对于(int i=0;ii)如果希望在另一个线程中执行doWork
slot,则应调用pObj->moveToThread(pThread)
。很难理解您的代码。您在哪里调用//创建线程?我已经演示了如何处理多线程服务器示例。一般来说,由于大多数此类任务中固有的数据共享,在单个连接上分离接收和传输线程可能是一种过早的悲观态度。很少有c接收端和传输端完全不相关的通信协议-仅此而已,您需要两个线程。谢谢,我将浏览此链接。