QT 多线程 业务类
时间: 2023-06-20 12:07:27 浏览: 130
在 Qt 中使用多线程可以让我们使用并发编程来加快程序的执行速度和提高程序的响应性。在使用多线程时,我们需要将业务逻辑封装到一个类中,并通过信号和槽机制来实现线程间的通信。
以下是一个简单的业务类示例:
```cpp
class Worker : public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent = nullptr);
public slots:
void process();
signals:
void finished();
void error(QString err);
private:
// 业务逻辑函数
void doWork();
};
```
在上面的代码中,`Worker` 类继承自 `QObject`,并定义了 `process()` 槽函数和 `finished()`、`error(QString err)` 信号。在 `process()` 函数中,我们可以调用 `doWork()` 函数来执行具体的业务逻辑。
在 `doWork()` 函数中,我们可以执行一些比较耗时的操作,例如读写文件、网络请求等等。为了不阻塞主线程,我们可以将这些操作放到一个新的线程中执行。
下面是一个使用 `QThread` 类的示例:
```cpp
void Worker::process()
{
QThread* thread = new QThread;
connect(thread, &QThread::started, this, &Worker::doWork);
connect(this, &Worker::finished, thread, &QThread::quit);
connect(this, &Worker::finished, this, &Worker::deleteLater);
connect(thread, &QThread::finished, thread, &QThread::deleteLater);
connect(this, &Worker::error, thread, &QThread::quit);
connect(this, &Worker::error, this, &Worker::deleteLater);
moveToThread(thread);
thread->start();
}
void Worker::doWork()
{
// 执行具体的业务逻辑
// ...
// 发送执行完成信号
emit finished();
}
```
在上面的代码中,我们创建了一个新的线程,并将 `Worker` 对象移动到新线程中。然后连接了一些信号和槽函数,以便在线程执行完成时发出 `finished()` 信号,并在必要时处理错误。
最后,在主线程中创建 `Worker` 对象,并调用 `process()` 槽函数即可开始执行业务逻辑。
阅读全文