Eine der gängigen Möglichkeiten, separate parallele Threads in einer Qt-Anwendung zu erstellen und nützliche Aktionen darin auszuführen, besteht darin, von der QThread -Klasse zu erben und die run() -Methode zu überschreiben, in der der nützliche Anwendungscode verwendet wird hingerichtet werden. Beim Kennenlernen von Streams habe ich zufällig verschiedene Meinungen zu diesem Thema gelesen, und in dieser Lektion werden wir uns mit einer der möglichen Methoden zum Arbeiten mit Streams vertraut machen, die jedoch nicht als die beste Option angesehen wird.
Wenn wir von der Klasse QThread erben, wäre es im Allgemeinen logisch anzunehmen, dass dies mit dem Ziel geschieht, dass uns die Funktionalität dieser Klasse nicht ausreicht. Aber wenn dies nur zu dem Zweck geschieht, einen nützlichen Code in die run() -Methode einzufügen, der in einem separaten Thread ausgeführt werden sollte, dann stimmt eindeutig etwas nicht. Darüber hinaus kann es ein Problem mit der Anwendungsskalierung und der Wiederverwendung von Code geben, insbesondere wenn viele solcher geerbten Klassen vorhanden sind.
Diese Methode ist die unterste Ebene und wird hauptsächlich zum Anpassen nativer Streams verwendet. Was etwas der üblichen Notwendigkeit widerspricht, eine Aufgabe in einem separaten Thread auszuführen. Das heißt, wie oben erwähnt, ist ein solcher Ansatz in erster Linie notwendig, um die Funktionalität der Klasse zu erweitern. Trotzdem muss diese Methode in Betracht gezogen werden, zu der wir übergehen.
main.cpp
Dieses Beispiel ist extrem klein, daher gehen wir nicht im Detail auf die Projektstruktur ein. Beachten Sie, dass eine Konsolenanwendung erstellt wird, in deren Datei main.cpp drei Threads mit unterschiedlichen Namen erstellt werden. Und Thread-Klassen werden von QThread. geerbt.
#include <QCoreApplication> #include "examplethreads.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); ExampleThreads threadA("thread A"); ExampleThreads threadB("thread B"); ExampleThreads threadC("thread C"); threadA.start(); // Запускаем потоки threadB.start(); // и наблюдаем их параллельную работу threadC.start(); // в выводе qDebug return a.exec(); }
Beispielthreads.h
#ifndef EXAMPLETHREADS_H #define EXAMPLETHREADS_H #include <QThread> class ExampleThreads : public QThread { public: explicit ExampleThreads(QString threadName); // Переопределяем метод run(), в котором будет // располагаться выполняемый код void run(); private: QString name; // Имя потока }; #endif // EXAMPLETHREADS_H
examplethreads.cpp
#include "examplethreads.h" #include <QDebug> ExampleThreads::ExampleThreads(QString threadName) : name(threadName) { } void ExampleThreads::run() { for (int i = 0; i <= 100; i++ ) { qDebug() << name << " " << i; } }