我必须在按下两个不同的按钮时启动/停止线程。
请建议我的代码是否正确。我是否错过了 connect() 调用中的某些内容?
Problem
我面临的是,在我的线程上调用 quit() 之后,我等待我的线程完成,但 wait() 在线程上调用never returns true
,而我的program is stuck in
,while(!m_deviceThread.wait())
请建议如何解决这个问题?
我在 Mainwindow 类中定义的设备线程和工作对象:--
QThread m_deviceThread;
deviceThreadObject *m_deviceThreadObject;
主设备线程对象:-----
class deviceThreadObject : public QObject
{
Q_OBJECT
public:
explicit deviceThreadObject(QObject *parent = 0);
/*!
Termination control main thread
*/
bool m_bQuit;
signals:
public slots:
void dowork();
};
deviceThreadObject 对象构造函数:--
// constructor for the deviceThreadObject
deviceThreadObject::deviceThreadObject(QObject *parent) :
QObject(parent)
{
m_bQuit = false;
}
我有m_deviceThread
在按下按钮开始时运行的主线程:---
void MainWindow::on_actionStart_triggered()
{
if(!b_threadAlreadyStarted)
{
m_deviceThreadObject = new deviceThreadObject;
// connect device thread signal to the slot
connect(&m_deviceThread ,SIGNAL(started()),m_deviceThreadObject,SLOT(dowork()));
m_deviceThreadObject->moveToThread(&m_deviceThread);
// Set the flag before starting slot of main thread
m_deviceThreadObject->m_bQuit = true;
m_deviceThread.start();
}
}
我有m_deviceThread
在按钮停止按下时停止的主线程:---
void MainWindow::on_actionStop_triggered()
{
if(b_threadAlreadyStarted)
{
b_threadAlreadyStarted = false;
// get out of event loop
m_deviceThreadObject->m_bQuit = false;
m_deviceThread.quit();
qDebug() << " \n quit ";
// wait for thread to terminate
while(!m_deviceThread.wait());
m_deviceThreadObject->deleteLater();
qDebug() << " \n finished";
}
}
// 设备的公共插槽 - 线程
void deviceThreadObject::dowork()
{
while(m_bquit)
{
// Do some work
}
}