qt 等待线程结束_c – 停止Qt线程:调用exit()或quit()不会停止线程执行
在main()即主線程中創建了一個QThread.
將一個worker類移動到新線程.該線程執行worker類的’StartThread’方法.
工人線程:
//header file
class Worker : public QObject
{
Q_OBJECT
public:
Worker(QThread* thread);
public slots:
void StartThread();
void EndThread();
private:
QThread* m_pCurrentThread;
};
// source file
#include "QDebug"
#include "QThread"
#include "worker.h"
Worker::Worker(QThread* thread)
{
m_pCurrentThread = thread;
}
void Worker::StartThread()
{
qDebug() << " StartThread";
while(true)
{
QThread::msleep(1000);
qDebug() << " thread running";
static int count = 0;
count++;
if(count == 10)
{
break;
}
if(m_pCurrentThread->isInterruptionRequested())
{
qDebug() << " is interrupt requested";
// Option 3:
m_pCurrentThread->exit();
}
}
qDebug() << "StartThread finished";
}
void Worker::EndThread()
{
qDebug() << "thread finished";
}
Main.cpp的
#include
#include "worker.h"
#include "QThread"
#include "QObject"
#include "QDebug"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QThread* thread = new QThread();
Worker* workerObj = new Worker(thread);
QObject::connect(thread,
SIGNAL(started()),
workerObj,
SLOT(StartThread()));
QObject::connect(thread,
SIGNAL(finished()),
workerObj,
SLOT(EndThread()));
workerObj->moveToThread(thread);
thread->start();
thread->requestInterruption();
QThread::msleep(2000);
qDebug() << "terminate thread";
if(thread->isRunning())
{
// Option 1,2 exit() / quit() used but got same output
thread->exit();
qDebug() << "wait on thread";
thread->wait();
}
qDebug() << " exiting main";
return a.exec();
}
現在,在’StartThread’完成并正常退出線程之前,我想從主線程中停止線程.
用過的,
> thread-> exit()
并在主線程中等待(thread-> wait()).
> thread-> quit()
并在主線程中等待(thread-> wait()).
>’StartThread’中的exit()
預期:
一旦從主線程調用exit()/ quit(),線程執行就應該停止.
實際:
在所有三個實例中,線程一直在運行,完成’StartThread’方法并正常退出.盡管沒有調用exit()/ quit().
輸出:
StartThread
thread running
is interrupt requested
terminate thread
wait on thread
thread running
is interrupt requested
thread running
is interrupt requested
thread running
is interrupt requested
thread running
is interrupt requested
thread running
is interrupt requested
thread running
is interrupt requested
thread running
is interrupt requested
thread running
is interrupt requested
thread running
StartThread finished
thread finished
exiting main
是否可以在主線程需要時停止/處理線程?
總結
以上是生活随笔為你收集整理的qt 等待线程结束_c – 停止Qt线程:调用exit()或quit()不会停止线程执行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript中作用域、全局作用域
- 下一篇: 实现iframe_面试官:来说说单点登录