Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Von: Simon Lubberich Erstbetreuer:

Ähnliche Präsentationen


Präsentation zum Thema: "© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Von: Simon Lubberich Erstbetreuer:"—  Präsentation transkript:

1 © 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Von: Simon Lubberich Erstbetreuer: Prof. Dr. rer. nat. Bodo Kraft Zweitbetreuer: Dipl.-Math. (FH) Uli Schmidt

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


Herunterladen ppt "© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Von: Simon Lubberich Erstbetreuer:"

Ähnliche Präsentationen


Google-Anzeigen