在 Qt 中,可以使用 QThread::quit()
或者 QThread::exit()
方法停止线程。
QThread::quit()
方法会让线程的事件循环结束,然后发出 finished
信号。这个方法通常用于在执行完一些操作后自动退出线程。例如:
class Worker : public QObject {
Q_OBJECT
public slots:
void doWork() {
// 执行任务...
QThread::currentThread()->quit();
}
};
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
Worker worker;
QThread thread;
worker.moveToThread(&thread);
QObject::connect(&thread, &QThread::started, &worker, &Worker::doWork);
QObject::connect(&worker, &QObject::destroyed, &thread, &QThread::quit);
thread.start();
return app.exec();
}
上面的代码创建了一个工作线程,并将 Worker
对象移动到该线程中执行。当线程启动时,会调用 Worker
对象的 doWork()
槽函数执行任务。当任务完成后,调用 QThread::currentThread()->quit()
方法结束线程。
另外,也可以使用 QThread::exit()
方法直接终止线程的运行。这个方法会强制停止当前正在运行的代码,并发出 finished
信号。但是,因为它可能会导致一些资源泄漏或数据不一致等问题,所以不建议经常使用。
需要注意的是,在主线程中不能直接调用 QThread::quit()
或者 QThread::exit()
方法来停止其他线程。应该使用信号和槽机制,通过在其他线程中发出信号,让主线程调用相应的槽函数来实现停止操作。