【问题标题】:Which Qt classes use the disk directly?哪些 Qt 类直接使用磁盘?
【发布时间】:2011-02-06 17:10:20
【问题描述】:

我正在尝试编写一个库来将所有磁盘活动分离到它自己的线程中,但文档并不真正关心这些事情。

我想要完成的是,除了启动之外,所有磁盘活动都是异步的,为此,我需要包装每个访问磁盘的类。以下是我目前发现的:

QtCore:

QtGui:

我相信还有更多。

【问题讨论】:

    标签: multithreading user-interface qt disk


    【解决方案1】:

    我有几点-

    首先,当你这样做时,记住所有的GUI对象都是基于QWidget的,都在启动线程中运行。请参阅http://doc.trolltech.com/4.6/threads-qobject.html 讨论线程。引用是“虽然 QObject 是可重入的,但 GUI 类,尤其是 QWidget 及其所有子类,是不可重入的。它们只能从主线程中使用。如前所述,QCoreApplication::exec() 也必须从中调用线程”。

    这也意味着,如果您需要在屏幕上显示来自这些包装类之一的信息,则在将信息传递回 GUI 线程时需要注意对象的所有权。特别是任何基于 QObject 的东西。

    其次,启动线程会带来运行时成本。因此,我建议您构建您的设计,以尽量减少创建和销毁此包装线程类的次数。

    总体而言是一种有趣的文件处理方法。这是我将为我当前的应用程序考虑的一个。它可能会解决我遇到的一些问题。

    【讨论】:

    • 这个想法是有一个单例将请求分派到适当的(私有)线程 - 我计划每个物理磁盘一个线程。由于线程主要是在休眠和等待,所以我认为将其留在身边不会有什么坏处。
    • 那行得通。我试图指出的是,如果您要在每次需要时创建此线程,则会产生运行时成本。我真的很喜欢单例的想法,明天我会考虑将它包含在我的项目中。
    猜你喜欢
    • 2016-12-10
    • 2011-02-20
    • 1970-01-01
    • 2010-09-07
    • 2015-12-18
    • 2014-11-23
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多