Evgenii Legotckoi
Evgenii Legotckoi9. Mai 2016 13:12

Qt/C++ - Lektion 047. QThread – So erstellen Sie Threads in Qt

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;
    }
}

Ausgabestreams

Videoanleitung

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
A
ALO1ZE19. Oktober 2024 08:19
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken