Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Helge Schenck Geändert vor über 9 Jahren
1
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Von: Simon Lubberich E-Mail: simon.lubberich@traveltainment.de Erstbetreuer: Prof. Dr. rer. nat. Bodo Kraft Zweitbetreuer: Dipl.-Math. (FH) Uli Schmidt 17.12.2010
2
© 2008 TravelTainment The Amadeus Leisure Group 2 Thread-Programmierung im Qt-Framework Inhalt: Was ist ein Thread Wofür werden Threads benutzt Probleme, die Threads mit sich bringen Das Qt-Framework Die Qt-Basisklasse QObject Die Klassenhierarchie Speicherverwaltung Die Klasse QThread Synchronisation Kommunikation Model-View-Architektur in Qt Fazit
3
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Ausführungsstrang Teilt Speicherbereich Vier Zustände inaktiv rechenbereit blockiert laufend Echt- oder pseudo- parallele Ausführung Erzeugt Verwaltungs- Over-Head 3 Was ist ein Thread: Prozess GUI-Thread Stack Thread2 Stack Heap Zugriff
4
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Zwei Klassen Speicherzugriff Warten auf anderen Thread 4 Probleme, die Threads mit sich bringen: Rechenintensive und parallelisierbare Probleme GUI-Entwicklung Wofür werden Threads benutzt:
5
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Klasse 2: warten auf Thread Anhalten von Threads Verklemmung 5 Probleme Deadlock: Klasse 1: Speicherzugriff Abhängig von einzelnen Operationen Problem Race Condition:
6
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 6 Das Qt-Framework: Framework zur GUI-Entwicklung Zusätzlich Nicht-GUI-Klassen z.B. Netzwerkklassen Keine zusätzlichen Bibliotheken erforderlich Die Qt-Basisklasse QObject: Automatische Speicherverwaltung Signal-Slot-Konzept
7
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 7 Die Klassenhierarchie: Klassen von Basisklassen abgeleitet Mehrfachvererbung
8
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 8 Speicherverwaltung: Automatische Speicherverwaltung durch QObject Klassenhierarchie Baumstruktur an Eltern-Kind-Beziehungen Objekt löscht Nachkommen
9
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 9 Die Klasse QThread: repräsentiert Threads Erleichtert Umgang QThreads verwenden Heap gemeinsam -> Synchronisation Erstellen eigener QThreads:
10
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 10 Qt-Klassen in QThreads verwenden: Thread nicht als Eltern-Objekt angeben Keine automatische Speicherverwaltung Objekte explizit löschen Synchronisation: Kritischer Abschnitt: Bereich mit globalen Variablen Zugriffsynchronisation kritischer Abschnitte Daten-Konsistenz sicherstellen
11
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 11 Synchronisation durch QMutex: Die Hilfsklasse QMutexLocker: Umschließt kritischen Bereich lock() -> sperrt kritischen Abschnitt unlock() -> hebt Sperre auf Konstruktor erhält QMutex-Objekt Konstruktor -> sperrt kritischen Abschnitt Destruktor -> hebt Sperre auf Synchronisation durch QSemaphor: Konstruktor erhält Anzahl Ressourcen acquire( ) -> dekrementiert evtl. Blockierung release( ) -> inkrementiert
12
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 12 Synchronisation durch QReadWriteLock: Synchronisiert Lese- u. Schreibzugriff lockForRead() -> sperrt Schreibzugriff lockForWrite() -> sperrt Lese- u. Schreibzugriff unlock() -> hebt letzte Sperre auf Synchronisation durch QWaitCondition: Primitive Kommunikation wait() -> blockiert Thread Argument: gesperrtes QMutex-Objekt wakeOne() -> reaktiviert einen Thread wakeAll() -> reaktiviert alle Threads
13
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 13 Kommunikation: Signal-Slot-Konzept QObject-Nachkommen Makro Q_OBJECT setzen Signals & Slots explizit kennzeichnen Argumentlisten identisch oder Slot besitzt weniger Argumente
14
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 14 Kommunikation zwischen QThreads: Gemeinsame Variablen Synchronisationsmechanismen Signal-Slot-Konzept Kommunikation mit Hauptthread: Darf nur GUI updaten Nur Signal-Slot-Konzept geeignet Verbindung zu Objekten des Hauptthreads
15
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 15 Model-View-Architektur: Das Delegate-Objekt: Element der View Ändert Model über View Definiert genau Anzeige Wichtige Methoden: createEditor(), setEditorData(), setModelData() und paint() Model View1 View2 Delegate1Delegate2 Rendering Editing
16
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 16 Model-View-Architektur:
17
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework 17 Fazit: Positiv: Sehr mächtiges Framework Leicht verständliche Kommunikationsmechanismen Bietet viel Funktionalität Plattformunabhängig Sehr gut dokumentiert Negativ: Großer Aufwand beim Anlegen von Klassen Ungeeignet für Verarbeitung großer Datenmengen z.B. QString Programm benötigt immer Bibliotheken von Qt
18
© 2008 TravelTainment The Amadeus Leisure Group 18 Vielen Dank
19
© 2008 TravelTainment The Amadeus Leisure Group 19 Model View1 View2 Delegate1Delegate2 Rendering Editing
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.