Witam, mam klasę w Qt, która wygląda tak:
class Board : public QWidget
{
Q_OBJECT
public:
signals:
public slots:
void start();
private:
void toDo();
}
Chciałbym wykonać współbierznie funkcję toDo tak aby nie blokował mi się wątek. W tej funkcji znajduje się długa pętla, wykonująca dość zasobożerne obliczenia na różnych obiektach. NIestety mam problem z odpaleniem wątku z biblioteki Qt (QThread). Są dwie możliwości, albo dziedziczenie po QThread, implementacja metody run() i tam wciśnięcie tego kodu. Ale ja już dziedziczę po klasie QWidget więc odpada. Drugim jest takie wykorzystanie metody moveToThread ale ona nie działa. Wyrzuca jakiś błąd (nie będę go przytaczał bo ta metoda mnie nie interesuje). Skoro Qt nie dostarcza mi możliwości stworzenia wątku postanowiłem wykorzystać bibliotekę <thread>. Zrobiłem coś takiego:
void Board::start()
{
std::thread th(&Board::run, this);
}
Program owszem się skompilował ale przy próbie wystartowania wątku program się wysypuje prawdopodobnie dlatego że nigdzie nie dałem .join(). (debugger pokazał że wykonał się warunek w bibliotece thread
if(joinable())
std::terminate();
ale gdy dam th.join() to wątek główny czeka na wątek poboczny - a to chcę uniknąć bo blokuje mi interfejs.
Proszę o pomoc.
Pozdrawiam :)