linux qt 线程事件循环
时间: 2023-08-02 12:10:49 浏览: 54
在Qt中,每个线程都有其自己的事件循环,可以通过QThread::exec()方法开启线程的事件循环。在事件循环中,线程会不停地从事件队列中取出事件并处理,例如处理用户输入、绘制GUI界面等。
下面是一个简单的示例代码,演示如何在一个新线程中启动事件循环:
```c++
#include <QThread>
#include <QDebug>
class MyThread : public QThread
{
public:
void run() override
{
qDebug() << "Thread started";
exec(); // 开启事件循环
qDebug() << "Thread stopped";
}
};
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
MyThread thread;
thread.start(); // 启动线程
// 向线程发送事件
QTimer::singleShot(1000, &thread, [](){
qDebug() << "Event received";
});
return app.exec();
}
```
在这个示例中,我们创建了一个新的线程MyThread,并在该线程中开启了事件循环。在主线程中,我们通过QTimer::singleShot()方法向MyThread线程发送一个事件,等待1秒后触发。当MyThread线程收到这个事件后,在事件循环中会执行我们定义的lambda表达式,输出"Event received"。
需要注意的是,在多线程编程中,不同线程之间的数据访问需要进行同步,否则可能会出现线程安全问题。Qt提供了多种线程同步机制,例如QMutex、QReadWriteLock、QSemaphore等。您可以根据具体的需求选择合适的同步机制。