Wpis z mikrobloga

Hej mam klasę która dziedziczy z QThread i wykonuję coś takiego:

self.quit()
self.exit()
print("Po exit?")

Moim zdaniem print się nie powinien wykonać nigdy.


Jakieś rady?
#qt5 #qt #python #pyqt #pyqt5 w sumie to też #cplusplus bo to tylko nakładka pythonowa na funkcje w c++
  • 11
@xaoc: quit i exit wysyłają sygnał na który reaguje główna pętla qt, a nie tak od razu. no i ten, prawdopodobnie nie potrzebujesz uzywać qthread w ogóle... po to jest łówna pętla. no i masz jeszcze qtconcurrent.
@xaoc: Zwykle w programowaniu używa się flag do zasygnalizowania chęci ubicia wątku. Podejrzewam, że te funkcje ustawiają taką właśnie flagę, a wątek faktycznie ubijany jest w innym momencie. To są tylko moje przypuszczenia, bo w Qt się nie bawiłem, ale mechanizmy zazwyczaj są podobne.
@Dijuna: @DrDevil: Ok. A skoro ten wątek nie ma nic więcej robić to co mam wywołać na nim samym wait()?
Używałem terminate(). Ale ono powodowało nieprzewidziane zachowanie programu.
@DrDevil: @Dijuna: Bo on mi idzie dalej i próbuje wykonywać rzeczy, których po tym warunku nie powinien. A ten wątek wysyła do użytkownika wiadomość sam z siebie, że nastąpił błąd i trzeba ruszyć dupę i poprawić kabelek. Więc nie potrzebuje reakcji pętli głównej.
@xaoc: a w ogóle to dodaj sprawdzanie kabelka do głównej pętli, qt jest specjalnie zreobione tak żebyś nie musiał się bawić w wielowątkowość... masz te całe signal/slot i w ogóle... :P
A skoro ten wątek nie ma nic więcej robić to co mam wywołać na nim samym wait()?


@xaoc: return (bo zakładam, że chodzi Ci o to jak nie wykonywać nic więcej w metodzie run() wątku)

Metody exit() i quit() są w QThread tożsame (tyle że quit() jest slotem, a exit() może jeszcze przyjąć kod wyjścia) i robią tylko tyle, że jeśli wcześniej w wątku wywołałeś exec() (czyli uruchomiłeś pętlę zdarzeń w
@vipe: Dziękuję panie kolego, dokładnie o to mi chodziło. Tak nie wiem nawet co exec() robi ( ͡° ʖ̯ ͡°). Mam nadzieję, że to się jednak zmieni niebawem.

Super wszystko wyjaśniłeś. Aż będę Cię obserwował, może się jeszcze wielu rzeczy nauczę.
@Dijuna: Bardzo denerwuje mnie to w takich dokumentacjach, że one są przydatne jak już wiesz o co chodzi i to rozumiesz. Bardzo często jest brak prostego przykładu pokazującego jak to działa.