qt 创建线程 终止线程 范例代码
时间: 2024-09-24 08:09:05 浏览: 40
在Qt中创建线程通常使用QThread类,下面是一个简单的示例,展示了如何创建、启动线程以及终止线程:
```cpp
#include <QObject>
#include <QThread>
#include <QDebug>
// 定义线程任务
class Worker : public QObject
{
public slots:
void run() {
qDebug() << "Worker thread started.";
// 这里可以放置你需要线程执行的任务,比如循环或耗时操作
for (int i = 0; i < 5; ++i) {
qDebug() << "Running task " << i;
QThread::sleep(1000); // 模拟长时间运行
}
qDebug() << "Worker thread finished.";
}
};
// 主线程中的主程序
class MainThread : public QObject
{
private:
QThread workerThread;
Worker *worker;
public:
MainThread(QObject *parent = nullptr)
: QObject(parent), worker(new Worker(this))
{
// 将工作对象放入新线程
connect(&workerThread, &QThread::started, worker, &Worker::run);
connect(worker, &Worker::finished, &workerThread, &QThread::quit);
connect(&workerThread, &QThread::finished, this, &MainThread::deleteLater);
// 启动线程
startWorker();
}
~MainThread()
{
if (!workerThread.isFinished()) {
// 如果线程未结束,手动停止
workerThread.quit();
workerThread.wait(); // 等待线程退出
}
delete worker; // 删除工作对象
}
private slots:
void startWorker() {
// 将工作对象移动到新线程
workerThread.start();
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainThread main;
return app.exec();
}
```
在这个例子中,我们首先创建了一个`Worker`类作为工作线程的主体,它在一个槽函数`run`中执行任务。主线程通过`connect`将`run`函数与新线程关联,并在主线程退出前确保线程也关闭。
如果你想立即停止线程,可以在`startWorker`槽函数中加入检查条件,如果需要则直接调用`workerThread.quit()`。
阅读全文