Einfaches Multithreading mit Qt: mache ich das richtig?

8

Ich bin neu bei StackOverflow und frage mich, ob ich das richtig mache:

Ich schreibe eine einfache Qt-Anwendung, um Multithreading zu testen (etwas, das mir auch völlig neu ist). Ich habe ein MainWindow erstellt, das Widgets enthält, und eine Klasse MyThread, die QThread untersteuert und die run () -Methode überschreibt.

Die Anwendung zeigt einfach zwei Schaltflächen, "Start Counter" und "Stop Counter", und ein Textfeld an. Wenn "Start Counter" gedrückt wird, wird ein Worker-Thread erstellt und im Hintergrund ausgeführt, wobei ein Zähler in einer while-Schleife kontinuierlich inkrementiert wird und der Hauptthread (wo die GUI ist) mit dem aktualisierten Wert signalisiert wird. Wenn "Stop Counter" gedrückt wird, wird ein Signal an den Hauptfaden gesendet, der die While-Schleife stoppt, und der Zähler wird gestoppt, bis "Start Counter" erneut gedrückt wird.

Das funktioniert ganz gut ... aber ist es der beste Weg? Ich bin neu hier und lese eine Menge Leute, die sagen "Unterklasse QThread nicht" und andere Leute sagen "Unterklasse QThread", und es ist ein bisschen verwirrend. Wenn dies nicht der beste Weg ist, um diese Art von Dingen zu implementieren (eine rechenintensive Schleife in einem Hintergrund-Thread mit "Start" - und "Stop" -Schaltflächen auszuführen), was ist das? Wenn ich es falsch mache, wie mache ich das richtig? Ich möchte nicht falsch lernen.

Danke! Und hier ist der Code:

MyThread.h

%Vor%

MyThread.cpp

%Vor%

MainWindow.h

%Vor%

MainWindow.cpp

%Vor%     
evdc 05.03.2013, 04:48
quelle

2 Antworten

4

Meistens ist die QThread-Unterklassierung eine falsche Methode, Threading in Qt durchzuführen. Ich empfehle Ihnen, einen Artikel über Threads, Ereignisschleifen und andere zu lesen, der Ihnen eine Idee geben könnte, wie man Threads in Qt verwendet auf eine bessere Art und Weise. Aber hören Sie niemandem zu, der argumentiert, dass es den einzig richtigen Weg gibt, QThread zu verwenden. Es gibt 2 Möglichkeiten und während Subclassing im Allgemeinen nicht benötigt wird, könnte es manchmal nützlich sein. Sie müssen nur Nichtunterklassen verwenden, bis Sie wirklich eine Unterklasse erstellen müssen. In Ihrem speziellen Fall brauchen Sie keine Unterklassen.

    
ixSci 05.03.2013 05:08
quelle
1

Ersetze sleep(1/1000); durch msleep(100); Die Dinge werden gut gehen:)

    
Aham 25.11.2016 17:09
quelle

Tags und Links