首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtCore对QCoreApplication的依赖

QtCore对QCoreApplication的依赖
EN

Stack Overflow用户
提问于 2012-06-06 18:19:44
回答 1查看 1.9K关注 0票数 2

我试图使用Qt作为一个库(类似于),因为我希望在一些当前非Qt应用程序中重用Qt类,并在共享库中作为跨平台胶水重用Qt类。一切都是非GUI的。

DirectConnection很容易避免一些问题,有些问题可以通过私有事件循环来解决,甚至可以在线程中运行假的,并且可以工作(最后)。

我想知道哪些模块依赖于正在运行的QCoreApplication实例,没有它就不能工作。

一些Qt模块(在QtCore中)确实需要一个QCoreApplication实例才能正常运行。例如,QTimer依赖于QCoreApplication来调度计时器事件。我正在阅读文件,为,它似乎依赖于QThreadPool的一个全局实例,我将尝试查看应用程序执行是否至关重要,或者该实例是在第一次访问时创建的,或者可能不是。

我将研究QCoreApplicationPrivate源代码(目前是WindowsLinux6.0),但是任何正确方向的提示都是非常感谢的。

核心应用程序的其他功能依赖项是什么?请注意,它可能依赖于操作系统。

Edit1:由于库巴的回答,QCoreApplication事件循环似乎不需要调度计时器和套接字事件。因此,一些QtCore模块需要QCoreApplication的实例,但是不需要有一个运行中的应用程序事件循环。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-06 23:15:23

您将QCoreApplication的存在与正在运行的事件循环混为一谈。这两个概念是不同的。对于后者,您很可能需要前者,但后者不必在与前者相同的线程中运行。

最值得注意的是,如果在构建qApp->exec()的线程中没有任何要调度的事件,则不必真正调用QCoreApplication。

事实上,QCoreApplication的存在是一个没有问题的问题。QApplication会让事情变得更糟--你可以在一个非gui线程中启动它,但它不是可移植的,不能在OS上工作。我正在试图找出为什么它不能工作,但我现在没有太多的时间来提供一个令人满意的解决方案--还没有。

这也是一种误解,即QCoreApplication的事件循环需要运行,以便将套接字通知和计时器事件分派到其他线程。QCoreApplication的事件循环没有什么特别之处。有一个特定于平台的QAbstractEventDispatcher实例,当您实例化该线程中的第一个QEventLoop时,该实例将为该线程创建。QEventLoop对这个平台不了解任何具体的信息。

QCoreApplication的exec()方法非常简单,可以创建一个QEventLoop实例,从而创建一个特定于平台的QAbstractEventDispatcher实例。这个实例在任何方面都不特殊。它与在任何其他线程中创建的任何其他事件分派程序相同,正如我的代码读取所告诉的那样。

如果所有底层窗口系统都支持它,那么实际上就有可能使Qt代码多线程--每个线程事件的接收和分派已经是第一步了。最大的障碍,可能是唯一的障碍,是X库及其显示锁。显示锁显然是线程之间的争用问题。您需要每个想要与GUI对话的线程打开到X服务器的单独连接,我不知道Xlib是否支持这样做。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10919851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档