Qt 创建线程 终止线程
时间: 2024-09-23 07:07:29 浏览: 37
在Qt中,创建线程通常通过`QThread`类来实现。首先,你需要创建一个继承自`QObject`的子类,并指定它为`QThread`的友元。然后,在主线程中创建这个子类的对象,并启动线程:
```cpp
// 定义一个继承自QThread的子类
class MyThread : public QThread, public QObject {
public:
explicit MyThread(QObject *parent = nullptr) : QThread(parent), obj(this) {}
protected:
void run() override {
// 这里是你想要在线程中执行的代码
while (!quitFlag.isSet()) {
doWork();
qApp->processEvents(); // 防止阻塞主线程
}
}
private slots:
void stopThread() {
quitFlag.set();
}
private:
QAtomicFlag quitFlag;
Obj obj; // 将QObject作为成员,以便访问其信号和槽
};
// 在主线程中创建并启动线程
MyThread myThread;
connect(&myThread, &MyThread::stopThread, &myThread, &QThread::quit);
myThread.start();
```
为了终止线程,你需要提供一个停止线程的方法,如上例中的`stopThread()`,当需要结束线程时,可以调用这个方法。线程会检查`quitFlag`标志,一旦设置,线程就会退出`run()`函数。
注意,在`run()`循环中,我们使用了`qApp->processEvents()`来允许其他事件处理,避免长时间阻塞主线程。
阅读全文