我正在尝试创建一个类(如果可能的话,这个方式)将在一个单独的线程中运行。我找到的所有示例都显示了一个工作线程,它在工作完成后退出(在一个函数中):
void Worker::doWork()
{
for (int i = 0; i <= 10; i++) {
emit updateCount(i);
qApp->processEvents();
sleep(1000);
}
emit finished();
}
在这个例子中,据我所知,线程在发出'完成'信号后退出。 我想要做的是:
我将这段代码汇总在一起:
worker.h
class Worker : public QObject {
Q_OBJECT
public:
Worker();
~Worker();
public slots:
void process();
void TestFunc();
void Kill();
signals:
void finished();
};
worker.cpp
//constructor{..}
//destructor{..}
void Worker::process() {
qDebug("Hello World!");
}
void Worker::TestFunc()
{
int n=0;
while(n<10)
{
qDebug("Hello World from testfunc");
n++;
Sleep(1000);
QCoreApplication::processEvents();
}
}
void Worker::Kill()
{
emit finished();
}
的main.cpp
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int eh;
QThread* thread = new QThread;
Worker* worker = new Worker();
worker->moveToThread(thread);
QObject::connect(thread, SIGNAL(started()), worker, SLOT(process()));
QObject::connect(worker, SIGNAL(finished()), thread, SLOT(quit()));
QObject::connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
worker->TestFunc();
scanf("%i",&eh);
worker->Kill();
return a.exec();
}
问题是在我调用'worker-&gt; TestFunc()'之后,主线程(控制台窗口)被阻止,即在TestFunc完成之前我无法输入任何内容。
我确定我做错了,但我无法弄清楚这样做的正确方法。请引导我走向正确的方向。