Какие классы Qt используют диск напрямую? - PullRequest
3 голосов
/ 11 апреля 2010

Я пытаюсь написать библиотеку, чтобы разделить всю активность диска на отдельный поток, но документация на самом деле не заботится о таких вещах.

Что я хочу сделать, так это то, что, кроме запуска, вся дисковая активность асинхронна, и для этого мне нужно обернуть каждый класс, который обращается к диску. Вот что я нашел до сих пор:

QtCore:

QtGui:

Я уверен, что есть еще.

1 Ответ

1 голос
/ 11 апреля 2010

У меня есть пара баллов -

Во-первых, когда вы это сделаете, помните, что все объекты GUI основаны на QWidget и работают в начальном потоке. См. http://doc.trolltech.com/4.6/threads-qobject.html, в котором говорится о многопоточности. Цитата: «Хотя QObject является реентерабельным, классы GUI, особенно QWidget и все его подклассы, не реентерабельны. Они могут использоваться только из основного потока. Как отмечалось ранее, QCoreApplication :: exec () также должен вызываться из этого нить».

Это также означает, что если вам нужно отобразить информацию из одного из этих классов-оболочек на экране, вы должны быть осторожны с владением объектами при передаче информации обратно в поток GUI. В частности, все, что основано на QObject.

Во-вторых, запуск потоков связан с затратами времени выполнения. Поэтому я бы посоветовал вам структурировать свой дизайн таким образом, чтобы минимизировать количество созданий и уничтожений этого класса потока-оболочки.

В целом интересный подход к файлам. Это то, что я собираюсь рассмотреть для моего текущего приложения. Это может решить некоторые проблемы, которые у меня есть.

...