LINUX.ORG.RU

Как корректно завршить поток QThread в pyqt5?

 , ,


0

1

Имеется прога на pyqt5. В ней есть поток(qthread), в котором надо выполнять некоторое действие с определённой передочностю. Я использовал QThread.msleep для определеиня этого периода, и флаг, который выходил из циикла while. Но если период большой, то ждать выхода из цикла будет долго, а я хочу завршить его как только тыкну на кнопку в GUI (но не убивать, скоро запускть снова). Исходный код тут доволно стандартный, мне нужны скорее идеи.

Решение: Ждать по 100 мс и смотреть когда пора завершать.



Последнее исправление: nikitalol (всего исправлений: 1)
Ответ на: комментарий от nikitalol

если тебе не нужны религиозные войны, зачем ты пришёл на ЛОР? иди на форум разработчиков Qt, там местные любители проприетарщины и жопку тебе подотрут и с ложечки покормят

eternal_sorrow ★★★★★
()

Но если период большой, то ждать выхода из цикла будет долго, а я хочу завршить его как только тыкну на кнопку в GUI (но не убивать, скоро запускть снова)

Разбей большой период на меньшие. По другому никак в общем случае.

cloun1902
()
Ответ на: комментарий от Begemoth

Невозможно

Точнее такой подход не обеспечивает мне больших частот

nikitalol
() автор топика
Последнее исправление: nikitalol (всего исправлений: 1)
Ответ на: комментарий от cloun1902

Были мысли Но проблема в том что sleep функции не очень то точные(мне правда точность тут и не нужна большая, главное ошибку в 2 раза не получить)

nikitalol
() автор топика
Ответ на: комментарий от nikitalol

Но проблема в том что sleep функции не очень то точные

На интерактивных системах хоть как точности нет - что один вызов, что несколько - не проблема. Меньше десятой доли секунды разбивать смысла нет. Ну и как я уже сказал - по другому «корректного завершения» не сделать.

cloun1902
()
Ответ на: комментарий от cloun1902

а таймер в отдельном потоке насколько муторно делать?

nikitalol
() автор топика

Может не висеть на таймере а на семафоре? И по клику отдавать семафор.

anonymous
()

мне нужны скорее идеи

Если поток часто дрюкается, то зачем его завершать? Пусть висит в фоне, это не потребляет ресурсы, уверен и в PyQt5 аналогично

А когда появляется задача - передаешь данные в поток и там они жуются

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Тоже вариант, но в этом совте лучше как раз завершать, да и к тому же поставленной задачи оно не решит.

nikitalol
() автор топика
Ответ на: комментарий от I-Love-Microsoft

ой господи, прочитал как зовут ваш ник…

В какой то соцсети написал в каких то статусах, что не доверяю майкросовт, кек

nikitalol
() автор топика

Я использовал QThread.msleep для определеиня этого периода, и флаг, который выходил из циикла while.

QWaitCondition

ya-betmen ★★★★★
()

не знаю как в путоне, а в C++ используется выставка флага(interrupted вроде) и дальше поток должен его время от времени проверять.

salozar
()
Ответ на: комментарий от nikitalol

В чем проблема подождать максимум N секунд при завершении приложения?

deep-purple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.