QCoreApplication :: processEvents-为什么必须仅从主线程调用它?

问题描述 投票:1回答:2

由于只有一个QCoreApplication对象,为什么从哪个线程QCoreApplication::processEvents()调用它有什么关系?

毕竟,所有线程共享相同的地址空间。

c++ qt event-loop qeventloop
2个回答
1
投票

[如果看到此警告,那是因为processEvents中的代码不是thread-safe。即使它们共享相同的地址空间,工作或数据也可以在一个线程上的某个状态中累积,然后该线程可能被中断,该状态可以由另一个线程修改,然后原始线程将恢复其处理,就像原始状态仍然有效,但现在无效。如果执行诸如修改链表或任何非线程安全的数据结构之类的操作,则可能会丢失数据或损坏内存。


0
投票

您的标题不正确。可能是您假设QCoreApplication::processEvents是系统范围的“处理所有线程的所有可能事件”调用,但事实并非如此。您可以从您所在的任何线程(并且该线程正在运行事件循环)中调用它。

为什么从哪个线程调用它很重要:在Qt中,事件循环是每个线程的资源(您可以在任何线程上运行自己的事件循环,并且QCoreApplication::processEvents处理当前线程的事件队列。

© www.soinside.com 2019 - 2024. All rights reserved.