Wątki - wznawianie/zatrzymywani



  • Witam, utworzyłem klasę i dodaję ją do nowego wątku (this->moveToThread(QThread*));
    wszystko ładnie działa, podłączyłem sygnały tej klasy do funkcji, które działają w wątku głównym. Musiałem tak zrobić bo w wątkach steruję Labelami, które wyświetlam na formie. Jednak potrzebuję też losować pozycję tych labelów. Początkowo losowanie odbywa się w konstruktorze, a więc zanim klasa będzie działać w osobnym wątku. Jednak, gdy to losowanie odbywa się już gdy wątek chodzi, coś nie działa prawidłowo. Wydaje mi się, że gdyby zatrzymać wątek i funkcję losowania wykonać w głównym wątku to by działało wtedy ok. Jednak nie wiem jak zatrzymać wątek, wyrzucić z niego klasę, wykonać funkcję i z powrotem dać this->moveToThread(QThread*), thread->start();


  • Moderators

    Oddziel porządnie logikę od GUI. Pamiętaj, w Qt rendering może być wykonywany wyłącznie w głównym threadzie. A więc, gdy wątek wygeneruje kombinajcę labeli, prześlij w sygnale (albo mutexami) do wątku głównego informacje na temat nowej kombinacji w jakiś uzgodniony sposób (QStringList, QVector, może QMap, etc.).

    Albo, wyślij z wątku krótki sygnał, że należy przemieszać labelki, a logikę umieść w głównym wątku.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.