Потоки в Qt - PullRequest
       14

Потоки в Qt

3 голосов
/ 10 марта 2012

Я прочитал в интернете, что создание подклассов (производных класса от Qthread), а затем переписывание функции запуска для выполнения требуемой задачи не является правильным способом использования Qthread. Но я читал в некоторых книгах и документации Qt, чтобы использовать способ создания подклассов?

Можете ли вы сказать мне, почему не следует использовать метод подклассов? Создание подклассов Qthread - это простой способ использовать поток (для меня, потому что я новичок).

Спасибо.

Ответы [ 3 ]

2 голосов
/ 10 марта 2012

См. Эту замечательную статью о QThread: Великолепный беспорядок QThread Кристофа Эккерта , который побудил меня использовать QThread следующим образом: Threading без головной боли Брэдли Т. Хьюзом

Итог: IMHO, самый простой способ использовать QThread - это создать подкласс QObject, использовать сигналы / слоты и использовать moveToThread, чтобы объект жил в другом потоке с другим циклом событий.К сожалению, это не сработает, если вам абсолютно необходим поток "while(true)", но его очень часто можно избежать в Qt.

1 голос
/ 10 марта 2012

В документации QThread прямо говорится, что подклассы - это то, что нужно делать:

Для создания собственных потоков подкласс QThread и переопределение run().

Это несколько загадочно, потому что (как указывает шоби в другой ответ ), это уродливый дизайн, и есть альтернативное решение.

1 голос
/ 10 марта 2012

QThread был разработан и предназначен для использования в качестве интерфейса или контрольной точки для потока операционной системы, а не для размещения кода, который вы хотите запустить в потоке.Мы объектно-ориентированные программисты подкласс, потому что мы хотим расширить или специализировать функциональность базового класса.Единственные веские причины, по которым я могу придумать подкласс QThread, - это добавить функциональность, которой нет в QThread, например, возможно, указатель на память для использования в качестве стека потока или, возможно, добавление интерфейсов / поддержки в реальном времени.Код для загрузки файла, или для запроса базы данных, или для какой-либо другой обработки не следует добавлять к подклассу QThread;он должен быть заключен в отдельный объект.

для более подробной информации, пожалуйста, проверьте это ..

http://labs.qt.nokia.com/2010/06/17/youre-doing-it-wrong/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...