Event Driven C. Thorsten Schulz Betreuer: Michael Kuhn

Ähnliche Dokumente
GUI Programmierung mit GTK

Grafische Benutzerschnittstellen in C++ mit GTKmm Betriebssystemunabhängig gestalten 1. WILLKOMMEN IN DER WELT VON GTK+

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

Programmierung eines GIMP-Plugin

Modulare Programmierung und Bibliotheken

ctypes: Python-Bindings ohne C-Code

Einführung in die Programmierung mit Qt

Grafische Benutzeroberfläche mit Glade und Python

Projekt AGB-10 Fremdprojektanalyse

Funktionale Programmierung

Einstieg in die Informatik mit Java

Einführung in die Programmierung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

ROOT Tutorial für D. Liko

Softwareschnittstellen

6.3 Ereignisgesteuerte Programmierung

Entwicklung einer echtzeitfähigen CLI-Laufzeitumgebung für den Einsatz in der Automatisierungstechnik

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Vorlesung Informatik II

Benutzeroberflächen. Java Teil 4

Rich Internet Applications, Flex & Mate. (Ja, das ist Grafische Benutzeroberflächen!) Jakob Külzer jakob.kuelzer@gmail.

Übungen zur Android Entwicklung

Objektorientierte Programmierung

Whitepaper VCI - Virtual CAN Interface Einbindung in LabWindows/CVI

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

Javakurs 2013 Objektorientierung

SWT. -The Standard Widget Toolkit- Inhaltsverzeichnis. Thomas Wilhelm SWT. 1. Was ist SWT?

Script-Sprache für UPT und MKT-View II / III / IV. Einleitung, Anwendungsfälle, Programmierung. MKT Systemtechnik

Webengineering. jquery

Dokumentation. MC Frog von André Klonz, Rico Andrich und Steve Schneider

wxwidgets Eine GUI-Bibliothek für platformübergreifende Applikationen Oliver Schonefeld

Sponsoren der /ch/open

Praxisorientierte Einführung in C++ Lektion: Einführung in das GUI-Toolkit Qt

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

CLR CIL MCS ECMA-335. Linux.Ne t Albrecht Liebscher, Erlanger Linux Tage

Einführung in die Programmierung Wintersemester 2011/12

GRAFISCHE BENUTZERSCHNITTSTELLEN

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Computergrafik 1 Übung, Wintersemester Eclipse Hands-On. C++ Projektsetup mit OpenGL und GLUT unter Eclipse für Windows

Distributed Computing Group

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Oracle Enterprise Scheduler (ESS) Unleashed Carsten Wiesbaum esentri AG Ettlingen Schlüsselworte Einleitung Oracle Enterprise Scheduler (ESS)

Testen von grafischen Benutzeroberflächen

<body> <h1>testseite für HTML-Parameter-Übergabe<br>50 Parameter werden übergeben</h1>

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging

16 Ribbons Menüführung per Ribbon

Asynchrone Programmierung mit Async und Await in C# 5 unter der Lupe

Programmieren 2 Selbststudium Semesterwoche 4

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Software Engineering Klassendiagramme Einführung

Einführung in die Programmierung

Applets I. Grundlagen der g Applet-Programmierung

Mi. 12. Nov WA73 - R Projekt Software Engeneering 2003/04. SWT & JFace. Norman Thomas Rogowski

Remote Communications

eclipse - Entwicklungsumgebung und mehr ETIS SS05

Ein erstes Beispiel 397

GUI Programmierung mit Qt

Kapitel 10. Event Handling 10.1 MVC

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen

Architekturbeschreibung Koala Editor

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

JavaFX8 - JumpStart - JUGCH. file:///d:/workspace/kurs-java8/doc/javafx-jumpstart.html#1 1/128

1 Polymorphie (Vielgestaltigkeit)

check_cisco_voice Dokumentation

Computeranwendung und Programmierung (CuP)

AJAX SSL- Wizard Referenz

PIWIN 1 Übung Blatt 5

Christian Kurz SWT Projekt WS 07/08

Einführung in die C-Programmierung

Anwendungsbeschreibung an einem Beispiel

Library Management. 90 Altium Designer Lib+Sch

1 Vorraussetzungen. 2 Installiere Eclipse. FS 2015 Herausgabe: Dr. A. L. Schüpbach, D. Sidler, Z. István Departement Informatik, ETH Zurich

Grundlagen der Programmierung APPLETS

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein:

Technische Dokumentation IPCalculator

Programmentwicklung ohne BlueJ

Android User Interface

Session 1: Classes and Applets

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

Praxisorientierte Einführung in C++ Lektion: "Einführung in das GUI-Toolkit Qt"

Einführung in die Programmiersprache C

Neue Features in C# 2.0

Enterprise Java Beans Einführung

4. Objektorientierte Programmierung

5.1 Bestehende Projekte bearbeiten Neue Projekte erstellen 85

Informationsverarbeitung im Bauwesen

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Dokumentation zur Verwendung eines SOAP-Webservices in SAP PI

Graphische Benutzungsoberflächen

Java Einführung Collections

Grails. Weiterführende Themen zu Internet- und WWW-Technologien. Matthias Springer. 06. Juni 2011

Theoretische Aspekte

Selbststudium OOP4 Auftrag

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Seite 1 von 17 UPDATE:

DataTables LDAP Service usage Guide

eclipse und Komponenten

Transkript:

Event Driven C Thorsten Schulz 19.6.2014 Betreuer: Michael Kuhn

Inhaltsverzeichnis 1 Allgemeines 1 1.1 Was ist das überhaupt?................................ 1 2 Vor-, Nachteile 1 3 Callbacks 2 4 GTK+ 4 4.1 Was ist GTK+?.................................... 4 4.2 GTK+ im Detail................................... 5 4.3 GTK+ Funktionen.................................. 5 4.4 Beispiel........................................ 6 5 Aufgaben 7 5.0.1......................................... 7 5.0.2......................................... 7 5.0.3......................................... 7 5.0.4 optional.................................... 7 6 Quellen 8

1 Allgemeines 1.1 Was ist das überhaupt? Unter Event Driven versteht man hauptsächlich als Ansatz zur nichtlinearen Steuerung des Programmflusses. Der Ablauf des Programmes ist im Vorfeld nicht bekannt und auch nicht unter der Kontrolle des Programmes, sondern lediglich bei den aufrufenden Events. Dies lässt sich dieses Konzept beispielsweise sowohl in der GUI-Programmierung als auch in der Netzwerkprogrammierung wiederfinden. Dabei wird zusätzlich auch noch zwischen der eigentlichen Event Driven Programmierung und Signal Programmierung unterschieden. Dabei ähneln sich jedoch beide. Im Allgemeinen lässt sich sagen, dass man zu aller erst event-handler benötigt, welche oft von der jeweiligen Programmierumgebung(hier GTK+ gegeben wird. Anschließend müssen die vorher gesetzten event-handler mit den zugehörigen events gekoppelt werden, sodass die gewünschte Funktionalität auftreten kann. Im letzten Schritt muss die main loop aufgerufen/verwendet werden, welche auch meist von der jeweiligen Umgebung gestellt wird. Eine genauere Darstellung des Prinzips findet sich später in Verbindung mit GTK+ in der Ausarbeitung. 2 Vor-, Nachteile Vorteile Erlaubt mehr interaktive und nutzerfreundliche Programme Wartbarkeit: Programm ist in viele einzelne Teile unterteilt Erweiterbarkeit Einfache Möglichkeit neue Funktionalitäten hinzuzufügen Nachteile Programmfluss wird unübesichtlicher Nicht für alle Aufgaben geeignet 1

3 Callbacks In Programmiersprachen sind Callbacks(Rückruffunktionen) Funktionen, welche als Parameter übergeben werden können. Dabei gibt es je nach Programmiersprache unterschiede. In C wird dies mit Funktionspointern realisiert. Oft müssen Anwendungen unterschiedliche Funktionen aufrufen, wenn eine bestimmte Bedingung erfüllt ist. Dies lässt sich hiermit bewerkstelligen. Hier einmal zwei Beispiele zu Callbacks in C: CallbackSample.c 1 #i n c l u d e <s t d i o. h> 2 v o i d c a l l b a c k ( i n t a r r a y ) 3 { 4 a r r a y [ 0 ] = 4 ; 5 a r r a y [ 1 ] = 2 ; 6 } 7 v o i d f u n k t i o n m i t p o i n t e r ( i n t array, v o i d ( p o i n t e r ) ( i n t a r r a y ) ) 8 { 9 p o i n t e r ( a r r a y ) ; 10 } 11 12 i n t main ( v o i d ) 13 { 14 i n t a r r a y [ 2 ] ; 15 f u n k t i o n m i t p o i n t e r ( array, c a l l b a c k ) ; 16 p r i n t f ( %i%i, a r r a y [ 0 ], a r r a y [ 1 ] ) ; 17 } 2

1 #i n c l u d e <s t d i o. h> 2 #i n c l u d e <s t d l i b. h> 3 #i n c l u d e <time. h> 4 5 v o i d s c h r e i b e Z a h l ( i n t ( s o u r c e ) ( v o i d ) ) 6 { 7 p r i n t f ( Die Zahl i s t %d\n, s o u r c e ( ) ) ; 8 } 9 10 i n t erzeugezahl1 ( void ) 11 { 12 i n t geheim ; 13 f o r ( i n t i =0; i <= 5 ; i ++) 14 { 15 srand ( time (NULL ) ) ; 16 geheim += ( rand ( ) % 1000 +1); 17 } 18 r e t u r n geheim ; 19 } 20 21 i n t erzeugezahl2 ( void ) 22 { 23 r e t u r n 2 4 ; 24 } 25 26 i n t main ( v o i d ) { 27 s c h r e i b e Z a h l ( erzeugezahl1 ) ; 28 s c h r e i b e Z a h l ( erzeugezahl2 ) ; 29 } CallbackSample2.c 3

4 GTK+ 4.1 Was ist GTK+? GTK+ oder auch bekannt als Gimp Toolkit wurde ürsprünglich als Werkzeug zum erstellen der GUI für Gimp entwickelt worden, jedoch kann es heutzutage für die verschiedensten Anwendungsgebiete eingesetzt werden. Dabei baut sich GTK+ auf vier Bibliotheken auf: GLib......wird als Kern der internen Datenstruktur verwendet und bietet Funktionen wie event-loop, threads, etc an (Siehe Präsentation: Gnome Library: GLib). Pango... Cairo... ATK...... wird als Bibliothek mit Schwerpunkt auf Text- und Schriftartendarstellung genutzt....ist eine 2D-Grafik Bibliothek, welche sich rund um Input/Output ansiedelt....ist eine Bibliothek, welche eine Basis zur Zugänglichkeit von alternativen Eingabegeräten und ähnlichen bietet. 4

4.2 GTK+ im Detail Hier sieht man den ungefähren Ablauf einer simplen GTK+ Anwendung am Schaubild Button1 erhält ein Event des Users und sendet ein Signal. Dabei wird die Main Loop genutzt, um darüber die zu dem Button1 verbundene Funktion mithilfe eines Callbacks aufzurufen. Wenn dieser Callback abgeschlossen ist, wartet die Main Loop auf die nächsten einkommenden Events. 4.3 GTK+ Funktionen In GTK+ bietet eine Vielzahl an verschiedenen Funktionalitäten, welche die hier vorgestellten Funktionen weit überschreiten. Die vollständige Dokumentation von GTK+ lässt sich hier finden und erklärt den grundlegenden Aufbau der nutzbaren Funktionen: https://developer.gnome.org/gtk3/stable/ Im folgenden stelle ich eine Übersicht über die wichtigsten Funktionen für den Anfang an einem Beispiel vor: 5

4.4 Beispiel GTKSampleKommentiert.c 1 / 2 # GtkBook : 3 # A Book f o r GTK+ users. 4 # Copyright (C) July, 2005 Muthiah Annamalai 5 # 6 # This program i s f r e e software ; Licensed under GPL. 7 # 8 # Source : 9 # http : / / en. wikibooks. org / wiki /Computer Programming / Event driven programming 10 / 11 #i n c l u d e <gtk / gtk. h> 12 13 g b o o l e a n b t n c l i c k e d ( GtkWidget w, g p o i n t e r data ) 14 { 15 / Diese Funktion e r k l ä r t s i c h s e l b s t mit den in main ( ) genutzten und beschriebenen Methoden / 16 GtkButton btn=gtk BUTTON(w ) ; 17 g t k b u t t o n s e t l a b e l ( btn, You C l i c k e d Me ) ; 18 r e t u r n TRUE; 19 } 20 21 i n t main ( ) 22 { 23 / GtkWidget i s t d i e b a s i s K l a s s e a l l e r w i d g e t s i n GTK+. 24 D i e s e r e g e l t den s t a t u s und d e s s e n r e p r ä s e n t a t i o n 25 B e i s p i e l s w e i s e GtkWidget > GtkContainer > GtBox > GtkVBox / 26 GtkWidget w, box, btn ; 27 / I n i t i a l i s i e r e n / 28 g t k i n i t (NULL,NULL ) ; 29 / E r s t e l l t e i n t o p l e v e l Fenster, w e l c h e s andere w i d g e t s b e i n h a l t e n kann 30 ( GtkWindowType ) i s t entweder GTK WINDOW TOPLEVEL oder GTK WINDOW POPUP 31 GtkWidget gtk window new ( GtkWindowType type ) ; / 32 w=gtk window new (GTK WINDOW TOPLEVEL) ; 33 34 / gtk vbox new i s t ein container, welcher die Anordnung angibt ( höhe, abstand und 35 w e i t e r e GtkVBox w i d g e t s 36 Achtung : GtkVBox : deprecated f ür die Zukunft GtkBox nutzen / 37 box=gtk vbox new (! FALSE,! FALSE ) ; 38 / s e t z t den T i t e l Button Widget f ü r das t o p l e v e l F e n s t e r gtk window new ( i n diesem F a l l w) 39 40 v o i d g t k w i n d o w s e t t i t l e ( GtkWindow window, c o n s t gchar t i t l e ) ; / 41 g t k w i n d o w s e t t i t l e (GTK WINDOW(w), Button Widget ) ; 42 / Wie im v o r i g e n B e i s p i e l g t k w i n d o w s e t t i t l e 43 g t k b u t t o n n e w w i t h l a b e l ( c o n s t gchar l a b e l ) ; / 44 btn=gtk button new with label ( Hello World! Click Me : ) ; 45 / Fü g t dem C o n t a i n e r w das GtkWidget btn hinzu 46 void gtk container add ( GtkContainer container, GtkWidget widget ) ; / 47 g t k c o n t a i n e r a d d (GTK CONTAINER(w), btn ) ; 48 / Nutzt d i e GLib 49 G Callback i s t d i e n u t z b a r e c a l l b a c k Funktion, um den c a l l b a c k d u r c h z u f ü hren 50 G OBJECT wird genutzt um Attribute und Methoden f ür a l l e Objekttypen in GTK+ zu übergeben. 51 void ( GCallback ) ( void ) ; 52 g s i g n a l c o n n e c t ( i n s t a n c e, d e t a i l e d s i g n a l, c h a n d l e r, data ) ; / 53 g s i g n a l c o n n e c t (G OBJECT( btn ), c l i c k e d,g CALLBACK( b t n c l i c k e d ),NULL ) ; 54 / S e t z t d i e P o s i t i o n des T o p l e v e l F e n s t e r s i n der Mitte B i l d s c h i r m s 55 void gtk window set position (GtkWindow window, GtkWindowPosition p o s i t i o n ) ; / 56 gtk window set position (GTK WINDOW(w),GTK WIN POS CENTER ) ; 57 / Ruft a l l e widgets, welche i n w e n t h a l t e n s i n d r e k u r s i v a u f und z e i g t d i e s e wiederum an. 58 v o i d g t k w i d g e t s h o w a l l ( GtkWidget widget ) ; / 59 g t k w i d g e t s h o w a l l (w ) ; 60 / Am Ende wird die Hauptschleife ( main loop ) aufgerufen und g e s t a r t e t. Diese Funktion 61 kümmert s i c h um d i e e i g e n t l i c h e n E r e i g n i s s e / 62 gtk main ( ) ; 63 r e t u r n 0 ; 64 } 65 66 / 67 gcc o button button. c Wall ggdb pkg c o n f i g gtk + 2.0 c f l a g s l i b s 68 / Weitere Anwendungsbeispiele lassen sich in der Dokumentation, als auch gut Online finden. Zum Thema compilen finden sich hier weitere Informationen: https://developer.gnome.org/gtk3/stable/gtk-compiling.html Ein weiteres Beispiel(Hello World) zu GTK+ lässt sich hier finden: https://developer.gnome.org/gtk3/stable/gtk-getting-started.html Eine Liste von weuteren alternaitven GUI-Bibliotheken findet sich hier: http://de.wikipedia.org/wiki/liste_von_gui-bibliotheken#c 6

5 Aufgaben 5.0.1 Nenne die notwendigen Schritte, um einen Button in gtk+ zu implementieren. 5.0.2 Kommentiere das oben angegebene CallbackSample2.c. 5.0.3 Denke dir eine eigene sinnvolle Callbackfunktion aus, welche mindestens zwei Funktionen beinhaltet und implementiere diese anschließend. 5.0.4 optional Schreibe deine erste simple Anwendung mit GTK+ mithilfe der Dokumentation und dem bei 4 kommentierten Beispiel. Der Link zu der GTK+ Dokumentation findet sich bei 4.3 7

6 Quellen http://www.gtk.org/ letzter zugriff: 17.6.2014 https://developer.gnome.org/gtk3/stable/ letzter zugriff: 17.6.2014 http://en.wikipedia.org/wiki/event-driven_programming letzter zugriff: 15.6.2014 http://de.wikipedia.org/wiki/gtk%2b letzter zugriff: 15.6.2014 http://en.wikipedia.org/wiki/callback_%28computer_programming%29 Grafiken: [1] http://3.bp.blogspot.com/-aogh1yzd2i8/uffepankqli/aaaaaaaaaq0/gne72ayt27c/s1600/mainloop.png [2] http://www.gtk.org/images/architecture.png 8