Team Developer 7.1 Multithreading

Ähnliche Dokumente
Android Processes & Services

Probeklausur: Programmierung WS04/05

4D Progress Die Projektmethoden für diese Komponente erscheinen im Explorer auf der Seite Methoden unter Komponent-Methoden:

Implementation of a Framework Component for Processing Tasks within Threads on the Application Level

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 10

Java Kurzreferenz Für Fortgeschrittene

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Arbeitsblatt 5 EAD II NetBeans

Probeklausur: Programmierung WS04/05

SemTalk Services. SemTalk UserMeeting

Whitepaper VCI - Virtual CAN Interface Einbindung in LabWindows/CVI

p^db=`oj===pìééçêíáåñçêã~íáçå=

Thomas Claudius Huber. Asynchrone Programmierung mit C#

Repetitorium Informatik (Java)

White Paper. Embedded Treiberframework. Einführung

PROGRAMMIERUNG IN JAVA

Übersicht GUI PyQT TU Dresden, Sommerkurs Python GUI Folie 1 von XYZ

Java-Tutorium WS 09/10

Architekturbeschreibung Koala Editor

Agenda. Clients aus drei verschiedenen Perspektiven: Was ist ein Dialog? Komponentenarchitektur innerhalb eines Dialoges

Description of version PASO MD2

Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt WS 2006/2007

Web-Anwendungsentwicklung mit dem Delivery Server

BASIC-Tiger Starter Kit. Tel: +49 (241) Fax: +49 (241)

Windows Presentation Foundation (WPF) -Grundlagen -Steuerelemente. Dr. Beatrice Amrhein

Squeak verwenden. Neues Projekt starten. Werkzeuge. Einführung in die objektorientierte Programmierung

Xojo für FileMaker Entwickler

Softwareschnittstellen

Java Desktop Anwendungen

Verteiltes Debugging. Gemeinsames Debuggen in Saros

Konzept zur Push Notification/GCM für das LP System (vormals BDS System)

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Ich war's nicht! Fehler & Ursachensuche in APEX Peter Raganitsch FOEX GmbH Österreich Schlüsselworte APEX, Fehler, Debug, Logging, Nachforschung.

C/C++ Debugging mit CDT unter Eclipse

Abstimmen mit dem Gupta Report Builder

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

Einführung in die Programmierung Blockkurs Java

Erste Schritte mit Eclipse

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

Anzeige des Java Error Stack in Oracle Forms

USB -> Seriell Adapterkabel Benutzerhandbuch

Multi-Threading. Ralf Abramowitsch Vector Informatik GmbH

Softwareupdate-Anleitung // AC Porty L Netzteileinschub

Getting started with MillPlus IT V530 Winshape

Applets Belebung von Webseiten. Dipl.-Ing. Wolfgang Beer

Readme-USB DIGSI V 4.82

Trace- und Zeit-Zusicherungen beim Programmieren mit Vertrag

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung

Aktivitäten in C# /.NET umsetzen

Einführung in das Microsoft.NET-Framework. Programmiersprache C# MEF Das Managed Extensibility Framework. André Kunz

Visual Basic Express Debugging

Invitation - Benutzerhandbuch. User Manual. User Manual. I. Deutsch Produktübersicht Beschreibung... 2

Ein erster Blick. Eclipse und Debugging. Anlegen von Projekten. Wissenswertes...

2. Hintergrundverarbeitung in Android: Services und Notifications

Anhang A - Weitere Bibliotheken. Die Bibliothek Mail_02.lib ermöglicht das Versenden von s mit dem Ethernet-Controller

Task Queues und Thread Pools

Rails Ruby on Rails Ajax on Rails. Clemens H. Cap

Datenkollektor für SAP Customer Relationship Management (CRM) Status:

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Oracle-Threads unter Win32-Systemen killen

Entwicklungswerkzeuge & - methoden

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

4 Codierung nach Viginere (Lösung)

PowerBridge MSSQL Beta

Kapitel 5: Das Design

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

Algorithmen und Datenstrukturen

Objektorientierte Programmierung OOP Programmieren mit Java

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Praktikum Internetprotokolle - POP3

English. Deutsch. niwis consulting gmbh ( manual NSEPEM Version 1.0

Oracle Forms. Aufbau und Bestandteile von Formularen. Erstellen eines neuen Blocks. Starten von Oracle Forms

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

Rechnerarchitektur, Einführung in die Laborübungen

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

4 Vererbung, Polymorphie

Whitepaper. Produkt: combit List & Label 16. List & Label Windows Azure. combit GmbH Untere Laube Konstanz

OPGCOM BS2000/OSD. Windows PC. Kommunikation zwischen BS2000 Host und PC. FILE-Send. URL-Server. udp NAC. MAIL-Server. Mail-Client EVENT-List

Whitepaper. Produkt: combit address manager & combit Relationship Manager. Debuggen von Scripts in Visual Studio 2005

Versuchsziele. Grundlagen. Überblick: FB Automatisierung und Informatik Betriebssysteme Thema: Bounded-Buffer-Problem. 3.

JBoss Seam. Ein JEE 5 Webframework. Jörg Wüthrich Infopoint, 4. Februar 2009

Der Beginn einer wunderbaren Freundschaft von Stefan Schnell

Abschlusspräsentation Projekt Loan Broker mit BizTalk 2010

Spezifikationen und Voraussetzung

p^db=`oj===pìééçêíáåñçêã~íáçå=

JOB SCHEDULER. Managed User Jobs. Dokumentation Juli MySQL-Job-Automation

The app the crashes, before the breakpoint is reached: Code to the event:

Microsoft Office SharePoint 2007

Spezifikationen und Voraussetzung

VBA-Programmierung: Zusammenfassung

von Anja Austermann Drag and Drop

Testen von Android- Anwendungen. 6. Juni 2013

Netzwerktechnik Cisco CCNA

4D Server v12 64-bit Version BETA VERSION

Technical Support Information No. 123 Revision 2 June 2008

Aufbau des Beispiels. Arthur Zaczek. Feb 2015

Transkript:

Team Developer 7.1 Multithreading Parallele Prozesse in TD basierenden Anwendungen Roadshow April, 2018 Helmut Reimann

Agenda Was ist Multithreading? Team Developer 7.1 Implementation Debugging Beispiel OpenText Confidential. 2018 All Rights Reserved. 2

Was sind Threads? Threads sind ein Mechanismus um Programmecode Sequenzen parallel innerhalb einer Anwendung auszuführen User Interface (UI) vs. Worker Threads UI Bibliotheken wie MFC und WPF beinhalten definierte Threads um Anwender Interaktionen (Events) auszuführen Diese Threads nennt man UI Threads, sie sind innerhalb einer Anwendung verantwortlich für die Interaktion zwischen Anwender und Windows-Subsystem Wenn dieser Thread blockiert ist, dann steht die Anwendung (meist) temporär ( Keine Rückmeldung ) Worker Threads erlauben die Programmierung von lang laufenden Code Sequenzen im Hintergrund, ohne den aktuellen UI Thread zu blockieren Worker Threads haben keine Verbindung zu UI Elementen, daher müssen andere Mechanismen gefunden werden, um mit der Anwendungsoberfläche zu kommunizieren. Dispatcher Funktionieren unterschiedlich in Win32 und WPF, grundsätzlich bieten ein Dispatcher die Möglichkeit eine Kommunikation zwischen Hintergrund (Worker) Prozess und UI zu programmieren. OpenText Confidential. 2018 All Rights Reserved. 3

Implementierung von Threading in TD Das Arbeiten mit Threads kann sehr kompliziert sein! Oftmals bieten low level libraries eine sehr ausgeprägte Funktionalität und können somit fast alle Anforderungen abdecken, aber sind sehr schwierig mit dem Anwender Interface (Anwendungsoberfläche) zu verknüpfen. Ziel für TD: Einfache Implementierung und einfache Handhabung; Evtl. nicht den vollen Funktionsumfang. Nutzen eines Event-Modells wie in WPF um die Kommunikation zwischen Hintergrund Prozess und UI bereitzustellen. Einfache Übergabe von Informationen vom Hintergrund Prozess an den UI für Fortschritt, Prozess Ende, Fehler Handling usw. OpenText Confidential. 2018 All Rights Reserved. 4

Vorteile und Anforderung TD Multithreading Implementiert für Win32/Win64 und.net Anwendung arbeitet weiter, auch wenn aufwendige Prozesse im Hintergrund parallel laufen. Anwender kann trotz laufenden Hintergrund Prozessen weiter mit der Anwendung arbeiten auch bei Komplexen Datenbank Operationen Komplizierte Datei Transaktionen (z.b. XML-Schnittstellen) Verarbeiten von Mails Einfache TD OOP Implementierung Einfach zu debuggen OpenText Confidential. 2018 All Rights Reserved. 5

Neue Background Worker Klasse Background Worker Class ist ein neuer Klassen-Typ Diese Klassen können Functional Classes erben Diese Klassen besitzen eine Thread Start Outline Sektion: Dieser Code wird dann im parallelen Prozess ausgeführt. Es wird eine Instanz der Background Worker Class im Window in der neuen Thread Section eingefügt Diese Instanz beinhaltet eine Event Sektion, um eine Kommunikation zwischen Hintergrundprozess und Oberfläche zu ermöglichen. Innerhalb diesen Events, kann z.b. eine Progress Bar angesprochen werden. Für die Kommunikation wurden neue SAL-API Funktionen implementiert. OpenText Confidential. 2018 All Rights Reserved. 6

Architektur Background Worker Instance Report Progress Error Finished Thread Start Background Worker Instance Report Progress Error Finished Report Progress Thread Finish Error Dispatcher Thread Start Main UI Thread Background Worker Threads OpenText Confidential. 2018 All Rights Reserved. 7

Implementieren von Hintergrund Prozessen Erstellen einer Background Worker Class Einfügen der Background Thread Instanz einer Background Worker Class in das entsprechende Fenster Innerhalb des Window Objekts Start des Background Thread mit SalBackgroundWorkerStart(oBkgdWorker) Der Thread wird gestartet und erzeugt Events in der Thread Instanz OpenText Confidential. 2018 All Rights Reserved. 8

Background Worker Klasse Thread Class Definition Instanz Variablen zum Initialisieren der Klasse Übergabe von Werten aus der Anwendung Thread Code (Actions Sektion) Lang laufende Datenbank Prozesse Datei Verarbeitung Einlesen von Daten aus Schnittstellen Etc. Keine UI Interaktion! OpenText Confidential. 2018 All Rights Reserved. 9

Hintergrund Prozesse Hinzufügen einer Instanz der Background Workers Class zu einem Form/Dialog Fenster Die Thread Instanzen beinhalten die Thread Events Diese Events geben dem Entwickler die Möglichkeit ein Feedback vom Prozess an die Form/Dialog zu senden um z.b. die Progress Bar / Statuszeile upzudaten SalBackGroundWorkerStart(ThreadInstance) startet den Background Prozess (Thread) OpenText Confidential. 2018 All Rights Reserved. 10

Thread Events Thread Before Start Der Code innerhalb des Thread startet erst, wenn der Event Thread Before Start abgearbeitet ist. Setzen der Instanzvariablen, Übergabe von Variablen, Initialisierung. Synchroner Event Thread Report Progress Gesendet mit der API Funktion SalBackgroundWorkerReportProgress(nProgress, smessage) Sendet nprogress für einen prozentualen Fortschritt aus dem Background Prozess als Wert und den Message String. Asynchroner Event, der Hintergrund Prozess läuft weiter. Der Event Code läuft nur dann, wenn die GUI ohne Interaktion mit dem Anwender ist. Thread Finished Wird ausgelöst, wenn der Hintergrund Prozess beendet ist. Z.B.: Update der GUI mit Anzeige der Werte. Asynchroner Event Thread Error Wird ausgelöst, wenn ein unbehandelter Fehler im Hintergrund Prozess ausgelöst wird. Es ist sehr wichtig, dass keine Messagebox andere GUI Interaktion ausgelöst wird. Der Fehler sollte z.b. im Thread Error Event behandelt werden! Asynchroner Event OpenText Confidential. 2018 All Rights Reserved. 11

Thread Before Start Initialisierung bevor der Thread Code startet Setzen von Instanz Variablen usw. Thread startet nach der Ausführung des Codes OpenText Confidential. 2018 All Rights Reserved. 12

Thread Report Progress Ermitteln des Fortschritts des Hintergrund Prozesses Ein numerischer Wert und ein String werden vom Hintergrund Prozess zurückgegeben Update der Progress Bar und/oder Anzeige einer Meldung OpenText Confidential. 2018 All Rights Reserved. 13

Thread Finished Der Hintergrund Prozess wurde beendet: Enable Buttons, Ribbon Bar Änderungen, Anzeige der ermittelten Daten usw. Wenn ein unbehandelter Fehler auftritt und der Thread Error Event wurde ausgelöst, dann wird Thread Finished nicht ausgelöst! OpenText Confidential. 2018 All Rights Reserved. 14

Thread Error Wenn zur Laufzeit eines Hintergrund Prozesses ein unbehandelter Fehler auftritt, dann wird Thread Error vom Prozess gesendet nerror Ein optionaler Fehler Code, z.b. wenn ein SQL Error ausgelöst wird strerror Fehler Meldung als Text Wenn das Event ausgelöst wird, so darf keine Message Box ausgegeben werden! Wenn Thread Error ausgelöst wird, dann wird kein Thread Finished ausgelöst! OpenText Confidential. 2018 All Rights Reserved. 15

Neue Threading API Neue API für die Ausführung von Hintergrund Prozessen: SalBackgroundWorkerStart(oBkgdWorker) (Main) SalBackgroundWorkerReportProgress(nProgress, smessage) (Thread) SalBackgroundWorkerIsBusy(objBkgdWorker) (Main) SalBackgroundWorkerCancel(objBkgdWorker) (Main) SalBackgroundWorkerIsCanceled( ) (Thread) SalBackgroundWorkerAnyRunning(hWnd) (Main) OpenText Confidential. 2018 All Rights Reserved. 16

SalBackgroundWorkerStart() SalBackgroundWorkerStart(oBkgdWorker) Startet eine Background Worker Class. Es wird der On Thread Start Event ausgelöst, dann wird der Background Thread gestartet und der Code in Thread Start wird durchlaufen (Code in Background Worker Class) obkgdworker - Eine Background Worker Instanz die gestartet werden soll Returns Boolan - FALSE wenn der Prozess bereits läuft OpenText Confidential. 2018 All Rights Reserved. 17

SalBackgroundWorkerReportProgress() SalBackgroundWorkerReportProgress(nProgress, smessage) Löst den Event Thread Report Progress in der GUI aus. Dieser wird aus dem Thread Code gesendet Hinweis: Wird nur angezeigt, wenn die GUI keine Anwender Interaktion durchführt ( Idle ) nprogress Fortschrittswert smessage Meldung zum Fortschritt Returns Boolean - FALSE wenn der Prozess nicht läuft OpenText Confidential. 2018 All Rights Reserved. 18

SalBackgroundWorkerIsBusy() SalBackgroundWorkerIsBusy(objBkgdWorker) Abfragen, ob der Prozess noch läuft obkgdworker Name der Background Worker Instanz Returns Boolean - TRUE wenn dieser Prozess noch läuft OpenText Confidential. 2018 All Rights Reserved. 19

SalBackgroundWorkerCancel() SalBackgroundWorkerCancel(objBkgdWorker) Abbrechen eines Hintergrund Prozesses Hinweis: Es wird nicht ein sofortiges beenden den Prozesses erwirkt, es wird ein Flag gesetzt, das der Hintergrundprozess regelmäßig abfragen sollte. Wenn das Flag gesetzt ist, dann sollte die Anwendung den Hintergrundprozess beenden obkgdworker - Ein Background Worker Instanz Returns Boolean - FALSE wenn der Prozess abgebrochen wurde OpenText Confidential. 2018 All Rights Reserved. 20

SalBackgroundWorkerIsCanceled() SalBackgroundWorkerIsCanceled() Überprüfen, ob SalBackgroundWorkerCancel aufgerufen. Wenn ja: der Anwender muss den Prozess beenden. Beispiel: dieser Check wird bei jeder Schleife im Datenbankzugriff ausgeführt. Wenn True zurückgegeben wird: Prozess sauber beenden und Rückkehr zur Hauptanwendung. Returns Boolean - TRUE wenn SalBackgroundWorkerCancel vom Hintergrundprozess ausgelöst wurde OpenText Confidential. 2018 All Rights Reserved. 21

SalBackgroundWorkerAnyRunning() SalBackgroundWorkerAnyRunning(hWnd) Überprüft, ob ein Hintergrundprozess für eine Form / Dialog gestartet wurde. Gibt TRUE oder FALSE zurück Anwender kann gewarnt werden, wenn ein Fenster mit laufenden Hintergrundprozessen geschlossen wird Wenn hwndnull als Parameter übergeben wird, dann wird diese Funktion die gesamte Anwendung auf laufende Prozesse überprüfen Sinnvoll für CleanUp beim On App Exit OpenText Confidential. 2018 All Rights Reserved. 22

Thread Lifecycle Initialization TD spawns a new Worker Thread. Calls Thread Start event on form synchronously to give you ability to initialize properties for that run (file out name etc.) Notify During execution, SalBackgroundWorkerReportProgress can be used to send information to UI thread on progress Start Completion Execution TD calls Thread Start on the worker class, executes SAL code Error/Finished When SAL code returns from Thread Start, Finished is raised. Or if error is thrown, Error is raised OpenText Confidential. 2018 All Rights Reserved. 23

Thread Debugging Debuggen von Hintergrund Prozessen OpenText Confidential. 2017 All Rights Reserved. 24

Thread Debugging TD 7.1 beinhaltet neue Möglichkeiten zum debuggen von Hintergrund Prozessen Neues Debug Fenster Threads OpenText Confidential. 2018 All Rights Reserved. 25

Threads Window Erlaubt die Möglichkeit zwischen einzelnen Prozessen zu wählen Übersicht über Prozess Status: Running Thread führt Code aus Suspended Steht am Breakpoint, ist aber nicht aktiv(z.b. ein anderer Thread wird gedebugged) Debugging Der aktive Thread wird gedebugged Hinweis: Unterschiedliche Darstellung der aktiven Zeilen (Mehrere Zeilen können aktiv sein, dunkle Farbe zeigt aktive Position und Thread an) OpenText Confidential. 2018 All Rights Reserved. 26

Threads Window Right-click öffnet ein Kontext Menü um folgende Aktionen auszuführen: Continue/Step: Debuggen des ausgewählten Threads Select: Zeigt die aktuelle Code Zeile und der der Debugger wird gestoppt. Prozess wird angehalten. Break: Wenn der Thread im laufenden Modus ist: Debugger an aktueller Zeile anhalten Debug: Macht aus einem Suspended Thread einen aktiven Thread, zeigt entsprechend die Debug Informationen des entsprechenden Threads OpenText Confidential. 2018 All Rights Reserved. 27

Demo Threading & TD Demo OpenText Confidential. 2017 All Rights Reserved. 28

Danke! twitter.com/ot_gupta facebook.com/opentextgupta linkedin.com/company/opentextgupta opentext.com/gupta OpenText Confidential. 2018 All Rights Reserved. 29