Найти - Пользователи
Полная версия: PyQT и многопоточность
Начало » GUI » PyQT и многопоточность
1 2 3 4 5 6 7
Rudium
py.user.next
«Класс QThread создан и предназначен для использования в качестве интерфейса к потокам операционной системы, но не для того, чтобы помещать в него код, предназначенный для выполнения в отдельном потоке. В ООП мы наследуем класс для того чтобы расширить или углубить функциональность базового класса. Единственное оправдание для наследования QThread, которое я могу представить, это добавление такой функциональности, которой в QThread не существует, например, передача указателя на область памяти, которую поток может использовать для своего стека, или, возможно, добавление поддержки интерфейсов реального времени. Загрузка файлов, работа с базами данных, и подобные функции не должны присутствовать в наследуемых классах QThread; они должны реализовываться в других объектах»

Иными словами - популярный способ использования QThread = извращение.

https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/
py.user.next
http://doc.qt.io/qt-4.8/qthread.html

You can use worker objects by moving them to the thread using QObject::moveToThread().

Another way to make code run in a separate thread, is to subclass QThread and reimplement run().

Оба варианта работают, судя по всему. Просто проверь: запусти два процесса в текущем потоке и в унаследованном. Выполнятся они одновременно?
Rudium
py.user.next
http://doc.qt.io/qt-4.8/qthread.html
Оба работают, и один является извращением.
py.user.next
Rudium
Оба работают, и один является извращением.
Там не всё так просто.
wiki.qt.io. QThread
Раньше это был абстрактный класс и там было необходимо реализовывать метод run() в производном классе, иначе в этом методе ничего не было. Раньше - это не во времена динозавров, а совсем недавно. Потом стали разделять, но всё равно наследование остаётся, когда нужно добавить собственные сигналы в класс.
Так что это вполне нормально. Но когда добавляешь сигналы, там ещё есть какая-то муть с доступом к этим сигналам, поэтому половину этого и половину того - тоже не факт, что можно делать.

Так что если ты попадёшь на Qt 4.3, например, то твой новомодный метод не сработает, и ты будешь думать “а чо он не работает? там же вот написано”. А не работает, потому что там он является виртуальным методом. А ты можешь гарантировать, что твой код запустят на версии Qt 4.4 и выше? Пока что версия Qt 4.x вся живая. Хоть пятая версия и вышла, но это не факт, что ею все сразу стали пользоваться (для неё нужна новая система с новыми динамическими библиотеками).

У меня, например, тоже винда не десятая сейчас стоит, хоть она и вышла давно, и даже не восьмая, а седьмая. А почему? А мне не нужна новая винда, у меня всё работает на старой, время на переустановку всех программ и прочего я тратить не хочу, а новую винду ещё надо покупать (мы же помним, что это ещё и не бесплатное).

Ты думаешь “а вот я им скажу, чтобы они поставили новую Qt и они поставят”, а я тебе скажу, как будет: они посмотрят, твоя программа не ставится и требует обновления Qt, которое требует обновления системы, которое требует сидеть в Интернете несколько часов. Они просто выкинут твою программу. Нет программы - нет проблем.
Rudium
Топикстартер указывал в вопросе что изучает PyQt5. PyQt4 = оффтоп
py.user.next
Rudium
Топикстартер указывал в вопросе что изучает PyQt5. PyQt4 = оффтоп

А вот он пишет, что нашёл статью под PyQt4 и не может ей воспользоваться
admiral
Нашел статью PyQt: простая работа с потоками, но там под PyQT4.

Если бы PyQt4 было мёртвым, был бы смысл ещё заморачиваться, но оно будет жить ещё лет пять и материалов по нему уже дофига, а по PyQt5 он не может ничего найти. Так на чём лучше учиться, на живом и документированном или на новом и недокументированном ещё?
Rudium
py.user.next
Не могу найти новые носки, одену старые. На людях разуваться не буду. Зато они привычнее. Приняли форму ног и закоксовались.
py.user.next
Rudium
Не могу найти новые носки, одену старые.
У меня нет новых носок, я хожу в старых проверенных носках, стираных и без дырок.
А ты знаешь, что новое PyQt5 работает с глюками? Там же не просто добавляется функционал, а новые баги с ним приходят (недоделки и прочая хрень). Я несколько раз уже встречал, что на пятой версии глюки, а запускают то же самое на четвёртой - и всё нормально. Сейчас, наверное, её причесали уже, но как только она вышла, были баги, которых нет в четвёртой. Да можешь даже трекер найти их и посмотреть баги, свойственные только этой версии (ну, это в любой программе так).
Rudium
Не пользуйся PyQt5. Оставь это мне. Я сообщу, когда она на 100% будет идеальна и можно будет на нее перейти.
py.user.next
Rudium
Я сообщу, когда она на 100% будет идеальна и можно будет на нее перейти.
Я пользуюсь обычной Qt, PyQt тормозит на сигналах сильно, когда их много становится.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB