Pyqt5 Qtimer понимание - PullRequest
       51

Pyqt5 Qtimer понимание

1 голос
/ 08 мая 2020

это вопрос для понимания QTimer. Я создаю событие QTimer(), которое запускает функцию каждые 1000 мс. Эта функция работает, пока работает GUI. Итак, я использовал QTimer() в основном потоке (GUI поток), я не создавал QThread для этого события таймера. Мои вопросы:

1- Использует ли QTimer в потоке GUI (основной поток), влияет ли на функциональность GUI в любое время?

2- Есть ли у вас рекомендую создать QThread и запустить на нем это событие таймера, иначе не стоит и лучше сэкономить ресурсы. если да, не могли бы вы рассказать мне, как переместить этот таймер на QThread?

Ответы [ 2 ]

1 голос
/ 08 мая 2020
  1. Если вы хотите выполнить задачу periodi c, тогда QTimer - лучший вариант, а logi c QTimer должен использовать событие Qt l oop, чтобы проверить, запускается ли оно или не. Вместо этого вам следует беспокоиться о функции, которую выполняет QTimer, поскольку в целом любая функция, связанная с сигналом, не должна занимать много времени, и это задача разработчика.

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

Если вы собираетесь выполнить задачу periodi c, тогда там есть много альтернатив (не только QThread), но их функциональность зависит от конкретной c задачи:

  • threading.Timer

  • Создайте QObject, который живет во вторичном потоке, и вызовите его с помощью QTimer (здесь условие состоит в том, что время задачи намного меньше периода QTimer)

  • Используйте QThreadPool который запускает QRunnable с QTimer (QThreadPool может иметь максимальное количество активных runnable)

0 голосов
/ 11 мая 2020

Ответ Эдвина лучше всего, но я хотел бы отослать вас к проблеме, которую я решил за несколько недель go: Python Поток таймера не завершается с помощью ярлыка на рабочем столе

...