QThread 两种方式
时间: 2024-01-26 12:14:33 浏览: 68
QThread提供了两种方式来创建和管理线程:
方式一:继承QThread重写run函数
```cpp
class MyThread : public QThread {
protected:
void run();
};
void MyThread::run() {
// 在这里编写线程的逻辑代码
// ...
}
```
在这种方式下,我们需要创建一个继承自QThread的类,并重写其run函数。在run函数中,我们可以编写线程的逻辑代码。然后,我们可以创建该类的对象,并调用start函数来启动线程。
```cpp
MyThread *myThread = new MyThread;
myThread->start();
```
方式二:继承QObject并moveToThread
```cpp
class Worker : public QObject {
Q_OBJECT
public slots:
void doWork();
};
void Worker::doWork() {
// 在这里编写线程的逻辑代码
// ...
}
```
在这种方式下,我们创建一个继承自QObject的类,并在其中定义一个槽函数来编写线程的逻辑代码。然后,我们可以创建该类的对象,并将其移动到一个新的线程中。
```cpp
QThread *thread = new QThread;
Worker *worker = new Worker;
worker->moveToThread(thread);
QObject::connect(thread, SIGNAL(started()), worker, SLOT(doWork()));
thread->start();
```
这种方式使用了信号和槽机制来启动线程,并将槽函数的执行放在新的线程中。
阅读全文