2

既然只有一个QCoreApplication对象,为什么从哪个线程QCoreApplication::processEvents()调用很重要?

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

4

2 回答 2

3

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

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

于 2019-10-25T06:11:57.697 回答
1

如果你看到这个警告,那是因为里面的代码processEvents不是线程安全的。即使它们共享相同的地址空间,工作或数据也可能会在一个线程上以某种状态累积,然后线程可能会被中断,状态可能被另一个线程修改,然后原始线程将恢复其进程,就好像原始状态仍然有效,但现在无效。如果您正在做诸如修改链表或任何非线程安全数据结构之类的事情,以及其他危险,您可能会丢失数据或损坏内存。

于 2019-10-24T15:41:41.353 回答