Qt中术语“事件循环”w.r.t线程的含义是什么?

时间:2018-05-18 06:58:48

标签: multithreading qt event-loop

http://doc.qt.io/qt-5/threads-qobject.html#per-thread-event-loop
https://wiki.qt.io/Threads_Events_QObjects#Per-thread_event_loop

这两个链接谈论事件循环。请解释Qt中术语“事件循环”w.r.t线程的“含义”

1 个答案:

答案 0 :(得分:0)

事件循环通常是由主线程运行的循环,用于接收源自系统的事件(例如GUI交互,网络事件,定时器......)或来自其他Qt组件(例如{{3 },...)。事件循环等待新事件到达事件队列,然后将它们从队列中取出并将它们发送到目标QObject,在那里它们由被覆盖的QCoreApplication::postEvent()处理(例如A {{1}通过发出QObject::event(QEvent*),......)来处理鼠标按下事件。

每线程事件循环是上述概念的概括。这使得通过引入QPushButton的{​​{3}}概念来处理工作线程中的事件成为可能。线程亲和性是特定QObject应处理其事件的线程(从QObject调用QObject::event的线程)。总体而言,这可用于在工作线程中运行异步代码(因为GUI代码应仅在主线程中运行)。例如,您可以运行许多异步套接字并使QObject在单个工作线程中的某些指定的不活动时间之后断开这些套接字。每线程事件循环对于跨线程信号 - 时隙连接也是必不可少的,因为这种信号发射被转化为引擎盖下的QTimer(将被传递到其目的地QMetaCallEvent)。 / p>