Qt oraz wątki

0

Siemka. Pisze małą appke w QT (używam Qt Designer).
Mam klasę:

class LTB : public QThread
{
private:
//...
public:
    bool isRunning;
    void run();
    void Funkcja1();
    void Funkcja2();
};

To jest moje pierwsze podejście do QT, czytam jakieś poradniki ale tam jest przykład z funkcją 'run' i nie za bardzo łapię jak to działa.
skoro funkcja 'run' będzie w osobnym wątku wykonywana, to czy funkcja1 i funkcja2 też? (np w funkcja1 mam cały czas jakieś obliczenia, w funkcja2 mam losowanie liczb). Chcę, aby te funkcje wykonywały się niezależnie w wątkach. Zatem jak zrobić, aby run, funkcja1, funkcja2 były w osobnych wątkach i czy jest to dobry sposób [funkcje te w osobnych wątkach] odnośnie pamięci ? Jest to mała aplikacja, więc wątków dużo nie będzie

0

Od Qt 5 polecanym sposobem na wątki w Qt jest "przesuwanie" klas do QThread (moveToThread). Dziedziczenie oczywiście nie jest zabronione, ale trzeba zwrócić szczególną uwagę na to, co się robi. Poczytaj o tym w manualu: http://qt-project.org/doc/qt-5.0/qtcore/qthread.html

Jeżeli funkcje mają działać niezależnie to nie mogą być w jednym wątku - teraz są. Powinieneś przeczytać to: http://qt-project.org/doc/qt-4.8/thread-basics.html Zauważ, że tam jeszcze stosowana jest poprzednia domyślna metoda - czyli dziedziczenie. Przeniesienie tego do nowej polecanej metody będzie dodatkowym ćwiczeniem. ;-)

0

Czyli czy ten sposób będzie dobry:
w klasie LTB tworze QThread qThread;

następnie w dodatkowej klasie Controller(jak na przykładzie który mi podałeś)
tworzę LTB *control = new LTB;
następnie control->moveToThread(&qThread);
Jednak wydaje mi się, że znowu funkcja1, funckja2 będą w tym samym wątku
na jakiej zasadzie dodać te funkcje ? Sorry za totalny newbie, ale pogubiłem się przy connect() na przykładzie worker/controller

0

Żeby funkcje były w osobnych wątkach, potrzebujesz dwóch wątków. Każdy egzemplarz QThread zarządza jednym wątkiem. Nie wklejaj na siłę rozwiązań - zrozum zasadę działania i ją zastosuj. Zapewne nie potrzebujesz żadnego kontrolera (zapewne nie potrzebujesz wątków ;-). Może opisz swój problem ogólniej - co to za program i co ma robić?

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