Wielowątkowość w Qt - QThreads

Odpowiedz Nowy wątek
2018-03-11 16:40
0

Mam problem z programem okienkowym służącymdo kalibracji kamery

Program opera się na bardzo szybkim wczytywaniu kolejnych klatek z kamery wybranej przez użytkownika i wyświetlania ich w programie. Taki efekt osiągnąłem używając timera i wywołując co 30ms funkcję która aktualizuje cały interfejs. Gdy użytkownik wciśnie przycisk uruchamiający proces kalibracji to wywołuje się odpowiednia funkcja. Trwa ona dosyć długo wykonując obliczenia co powoduje zawieszanie się całej reszty programu. Pomyślałem, że w osobnym wątku mógłbym wywołać tą funkcję przekazując jej odpowiednie dane a cały program działał bo normalnie podczas gdy ona by sobie liczyła.

Jak w ogóle się za to zabrać ? Póki co stworzyłem obiekt dziedziczący po klasie QThread, w obiekcie w którym wykonuje się kalibracja, nadpisałem funkcję QThread::run(), podając jej potrzebne dane, po ich przetworzeniu wysyła sygnał do wątku głównego wraz z wynikiem wątek się kończy i tyle. Dane są przekazane przez referencje. Ale cały program działa tak samo jak działał...

Ktoś coś ?

Pozostało 580 znaków

2018-03-11 16:44
kq
1

Nie powinieneś nadpisywać metody run: http://blog.qt.io/blog/2010/06/17/youre-doing-it-wrong/

W tej sytuacji prawdopodobnie powinieneś użyć QThreadPool, żeby nie bawić się samodzielnie w wielowątkowość, a synchronizację pozostawić sygnałom i slotom.

Bez większej ilości informacji - np. kodu - ciężko powiedzieć czemu nie działa, może gdzieś masz jakiś join lub czekasz na jakiś mutex...


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0