给我个例子
时间: 2023-08-12 17:23:38 浏览: 29
下面是一个简单的示例,演示了如何在线程结束时自动释放线程对象:
```cpp
class MyThread : public QThread
{
public:
~MyThread() {
qDebug() << "Thread object destroyed";
}
protected:
void run() override {
// 在事件循环中监听 finished 信号
connect(this, &QThread::finished, this, &QObject::deleteLater);
// 启动事件循环
exec();
qDebug() << "Thread finished";
}
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
// 创建线程对象
MyThread *thread = new MyThread;
// 启动线程
thread->start();
// 等待线程结束
thread->wait();
qDebug() << "Main thread finished";
return app.exec();
}
```
在上面的示例中,`MyThread` 类继承自 `QThread`,并重写了 `run()` 函数。在 `run()` 函数中,我们首先连接了 `finished` 信号和 `deleteLater()` 槽,然后调用了 `exec()` 函数启动了事件循环。当线程执行完任务后,事件循环将退出,此时 `finished` 信号会被自动触发,从而调用 `deleteLater()` 函数释放线程对象。在 `main()` 函数中,我们创建了线程对象并启动了线程,然后等待线程结束。最后,程序进入事件循环并在退出时释放线程对象。