Qt的四种线程方式之一:QThread的使用实例
时间: 2024-03-10 18:43:44 浏览: 120
好的,我可以给你一个简单的QThread的使用实例。
首先,我们需要创建一个继承自QThread的类,例如:
```cpp
class MyThread : public QThread
{
Q_OBJECT
public:
explicit MyThread(QObject *parent = nullptr);
protected:
void run() override;
signals:
void mySignal(int value);
private:
bool m_running;
};
```
在这个类中,我们重写了QThread的run()函数,用来实现自己的线程逻辑。同时,我们还定义了一个自定义信号mySignal,用来向主线程发送消息。
接下来,在我们的主线程中,我们可以创建一个MyThread对象,并调用它的start()函数来启动线程,例如:
```cpp
MyThread *thread = new MyThread(this);
connect(thread, &MyThread::mySignal, this, [](int value){
qDebug() << "Received signal value: " << value;
});
thread->start();
```
在这个例子中,我们创建了一个MyThread对象,并连接了它的mySignal信号到主线程的一个lambda函数中。这个lambda函数会在mySignal信号被触发时被调用。
最后,我们需要在MyThread的run()函数中实现我们的线程逻辑,例如:
```cpp
void MyThread::run()
{
m_running = true;
int count = 0;
while (m_running) {
emit mySignal(count++);
msleep(1000);
}
}
```
在这个例子中,我们使用一个while循环和一个计数器来实现简单的线程逻辑。在每次循环中,我们发射mySignal信号,并将计数器的值作为参数传递给信号。同时,我们还在每次循环中使用msleep函数来让线程休眠1秒钟。
这就是一个简单的QThread的使用实例。当我们调用MyThread的start()函数时,它会在后台开启一个新的线程,并执行我们在run()函数中定义的线程逻辑。同时,它会发射mySignal信号,将计数器的值作为参数传递给主线程。
阅读全文