QT - przerywanie pracy wątku pobocznego


(renifer3) #1

Witam.
Czy istnieje w qt instrukcja, która jest w stanie przerwać pracę (nie czekać na zakończenie) wątku pobocznego?
Chciałbym zrobić coś takiego, że jest wątek poboczny i on coś tam robi w dużej pętli i w pewnym momencie wysyłam z wątku głównego “wiadomość” aby przerwać pracę tego wątku wykonującego pętlę.
Jest to wykonalne?


(Rolek0) #2

http://doc.qt.io/qt-5/qthread.html#terminate


(renifer3) #3

Nie zrozumiałem dokładnie części Warning. Z tego co rozumiem to wywołanie terminate() może sprawić, że mutexy się nie odblokują ale czy oprócz tego coś jeszcze, np. uszkodzić zmienne(adresy w pamięci) w trakcie ich edycji i wysypać program?

Dzięki za odpowiedź.


(kostek135) #4

Dodajesz do tej pętli dodatkowy warunek, np. globalny boolean (główny wątek pisze, poboczny czyta), który mówi czy rodzic pragnie przerwać pracę tego wątku jeśli tak to logika zakańcza w sposób normalny funkcję i tyle.[quote=“renifer3, post:3, topic:528038”]
Nie zrozumiałem dokładnie części Warning. Z tego co rozumiem to wywołanie terminate() może sprawić, że mutexy się nie odblokują ale czy oprócz tego coś jeszcze, np. uszkodzić zmienne(adresy w pamięci) w trakcie ich edycji i wysypać program?
[/quote]

Aż tak chyba nie. Ale może powodować wycieki pamięci (brak dojścia przetwarzania do logiki zwalniającej alokację obiektów). Jeśli robi coś po bazie danych z tworzeniem lock-ów, to deadlocki. Ogólnie nie wiesz w którym momencie pętli będzie wątek, kiedy zostanie przerwane wykonywanie. Lepiej to zrobić zmienną logiczną po pełnym obrocie pętli, kiedy wiemy, że dany obrót został wykonany w całości.


(renifer3) #5

Dziękuję, sprawdzę.