c++ qt 使用moveToThread的方式给出一个多线程的例子
时间: 2023-12-06 09:06:27 浏览: 79
下面是一个使用`QThread`和`moveToThread`的多线程示例,其中主线程创建一个工作线程并将其移动到工作线程:
```cpp
#include <QThread>
#include <QDebug>
class Worker : public QObject
{
Q_OBJECT
public slots:
void doWork()
{
qDebug() << "Worker thread ID: " << QThread::currentThreadId();
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug() << "Main thread ID: " << QThread::currentThreadId();
QThread thread;
Worker worker;
worker.moveToThread(&thread);
QObject::connect(&thread, &QThread::started, &worker, &Worker::doWork);
thread.start();
return a.exec();
}
#include "main.moc"
```
在这个例子中,我们创建了一个名为`Worker`的自定义QObject类,该类有一个名为`doWork()`的槽函数。当我们将`Worker`对象移动到工作线程时,该槽函数将在工作线程中执行。
在`main()`函数中,我们创建一个名为`thread`的QThread对象和一个名为`worker`的Worker对象。我们将`worker`对象移动到工作线程中,然后将`thread`的`started`信号连接到`worker`的`doWork()`槽函数。最后,我们启动工作线程并让应用程序进入事件循环。
当我们运行此示例时,我们可以看到输出,显示主线程ID和工作线程ID:
```
Main thread ID: 0x7fff4a8003b0
Worker thread ID: 0x7fff4a0003c0
```
这表明`doWork()`槽函数在工作线程中执行,而不是在主线程中执行。
阅读全文