AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Thread Programmierung unter Windows mit Delphi
Tutorial durchsuchen
Ansicht
Themen-Optionen

Thread Programmierung unter Windows mit Delphi

Ein Tutorial von Luckie · begonnen am 21. Sep 2003 · letzter Beitrag vom 29. Mai 2011
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Luckie
Luckie
Registriert seit: 29. Mai 2002
Threads mit Delphi
Thema: Threadprogrammierung mit Delphi

Version: 2.4 vom 2005-10-29

Inhaltsverzeichnis:
Zitat:
1 Vorwort........................................... .................................................. ....................... 4
2 Einführung........................................ .................................................. ...................... 5
2.1 Geschichtliches................................... .................................................. .............. 5
2.2 Begriffsdefinition................................ .................................................. ............... 5
2.2.1 Was ist ein Prozess?.......................................... ............................................ 5
2.2.2 Threads, die arbeitende Schicht........................................... ........................... 6
2.2.3 Multitasking und Zeitscheiben...................................... ................................... 7
2.3 Wann sollte man Threads einsetzen und wann nicht?............................................ .... 7
3 Grundlagen........................................ .................................................. ..................... 9
3.1 Zur Veranschaulichung................................. .................................................. ...... 9
3.2 Die Thread-Funktion.......................................... ................................................. 10
3.3 Einen Thread abspalten......................................... ............................................. 10
3.4 Beenden eines Threads........................................... ............................................ 11
3.4.1 Die Thread-Funktion endet............................................. .............................. 11
3.4.2 ExitThread........................................ .................................................. ....... 12
3.4.3 TerminateThread................................... .................................................. .... 12
3.4.4 Vorgänge beim Beenden eines Threads........................................... ............... 13
4 Thread-Ablaufsteuerung................................... .................................................. ....... 15
4.1 Anhalten und Fortsetzen von Threads........................................... ........................ 16
4.1.1 Fortsetzen........................................ .................................................. ........ 16
4.1.2 Anhalten.......................................... .................................................. ........ 16
4.1.3 Zeitlich begrenztes Unterbrechen...................................... ............................ 17
4.2 Temporärer Wechsel zu einem anderen Thread............................................ .......... 17
4.3 Thread Ausführungszeiten, Beispielanwendung ThreadTimes....................................18
5 Thread-Prioritäten....................................... .................................................. ........... 20
5.1 Darstellung der Prioritäten....................................... ........................................... 20
5.1.1 Prozess-Prioritäten....................................... ............................................... 20
5.1.2 Thread-Prioritätsklassen................................. .............................................. 22
5.2 Programmieren von Prioritäten....................................... ..................................... 24
5.2.1 festlegen der Prioritätsklasse.................................. ...................................... 24
5.2.2 Festlegen der Thread-Priorität......................................... .............................. 25
5.2.3 Prioritätsanhebung durch das System............................................ ................ 26
5.3 Beispielanwendung "Priority-Demo"............................................. ......................... 27
6 Thread-Synchronisation................................... .................................................. ........ 29
6.1 Atomarer Variablenzugriff.................................. ................................................. 29
6.2 Kritische Abschnitte........................................ .................................................. . 31
6.2.1 Wie funktionieren kritische Abschnitte........................................ .................... 33
6.2.2 Kritische Abschnitte und SpinLocks......................................... ....................... 34
7 Thread-Synchronisation mit Kernel-Objekten (neu in Version 2.2)................................... 36
7.1 WaitForxxx-Funktionen........................................ ............................................... 36
7.1.1 WaitForSingleObject............................... .................................................. ... 36
7.1.2 WaitForMultipleObjects............................ .................................................. .. 38
7.1.3 MsgWaitForMultipleObject (neu in Version 2.3).............................................. .. 38
7.2 Ereignisobjekte................................... .................................................. ............. 39
8 Das VCL Thread-Objekt............................................ ................................................. 41
8.1 Erzeugen, Eigenschaften, Methoden.......................................... ............................41
8.1.1 Erzeugen.......................................... .................................................. ....... 41
8.1.2 Eigenschaften..................................... .................................................. ...... 42
8.1.3 Methoden.......................................... .................................................. ....... 43
8.2 Beispiel einer Execute Methode........................................... ................................. 43
8.3 Synchronisation des Thread-Objektes.......................................... ......................... 44
Insgesamt 45 Seiten

Das Tutorial liegt als PDF vor und kann hier: http://delphitutorials.michael-puff.de runtergeladen bzw. online eingesehen werden. In dem dazugehörigen Zip Archiv (Threads_mit_Delphi.zip) befinden sich noch zusätzlich Demos.
Ein Teil meines Codes würde euch verunsichern.
 
Chewie

 
Turbo Delphi für Win32
 
#2
  Alt 21. Sep 2003, 14:41
Ein paar kleine Bemerkungen, nachdem ich ein paar Seiten gelesen habe:
  • Seite 5:
    Zitat:
    Sie können den selbe Code...
  • Seite 6:
    Zitat:
    Diese können sie...
    (Sie groß!)
  • Auf Seite 7 zitierst du die Delphi-Hilfe und schreibst, man solle niemals CreateThread benutzen, weiter oben aber gehst du nur auf CreateThread und nicht auf BeginThread ein

So, mal schauen, welche Fehler Matthias Simmack noch alle findet
Martin Leim
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

 
Delphi XE7 Architect
 
#3
  Alt 21. Sep 2003, 16:38
Sorry,

aber werden Anreden in der neuen dt. Schlechschreibung nicht klein geschrieben oder ist bzw irrelevant, ob man Anerden groß oder klein schreibt??? Kann mich auch irren, aber so kenne ich das...
  Mit Zitat antworten Zitat
MathiasSimmack
 
#4
  Alt 21. Sep 2003, 16:54
Zitat von Chewie:
So, mal schauen, welche Fehler Matthias Simmack noch alle findet
Gleich einen! Setzen, Sechs!


@DJ-SPM: Am großen "Sie" ändert sich auch in der neuen Rechtschreibung nichts. Es sei denn, du willst unbedingt unter Beweis stellen, dass für dich die PISA-Studie gilt ...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#5
  Alt 21. Sep 2003, 19:14
Zitat von Chewie:
Seite 5:
Zitat:
Sie können den selbe Code...
Vermerkt. Aber ich sammele erst mal etwas.
Zitat:
[*]Seite 6:
Zitat:
Diese können sie...
(Sie groß!)
In einer Anrede ja und ihm Brief ja, aber auch im Fließtext?
Zitat:
[*]Auf Seite 7 zitierst du die Delphi-Hilfe und schreibst, man solle niemals CreateThread benutzen, weiter oben aber gehst du nur auf CreateThread und nicht auf BeginThread ein
Ja und? CreateThread ist die Grundlage für BeginThread. BeginThread ist nur der Wrapper und dessen Parameter kannst du in der Hilfe nachkucken.
Zitat:
So, mal schauen, welche Fehler Matthias Simmack noch alle findet
Schon hast du dich dusqualifiziert.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Stanlay Hanks
Stanlay Hanks

 
Delphi 2005 Professional
 
#6
  Alt 21. Sep 2003, 19:27
Auch wenn das nicht das Hauptthema werden sollte:
Die Anreden "Sie, Ihr, Ihre (treu ergebene Mitarbeiterin...)" werden sowohl in Briefen, als auch in Fließtexten groß geschrieben. Die Anreden "du, dein" werden klein geschrieben, auch in beiden Fällen.

Man liest sich, Stanlay
  Mit Zitat antworten Zitat
Chewie

 
Turbo Delphi für Win32
 
#7
  Alt 21. Sep 2003, 19:43
Bezüglich BeginThread/CreateThread:

Es ist meiner Ansicht nach für jemanden, der neu in der Materie ist, etwas unverständlich, wenn es erst so aussieht, es mache keinen großen Unterschied, ob man CreateThread oder BeginThread benutze, dann aber weiter unten steht, CreateThread solle vermieden werden.
Martin Leim
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#8
  Alt 21. Sep 2003, 20:25
Ich hab doch klar und deutlich geschrieben, warum BeginThread vorzuziehen ist. Ich glaube, du konstruierst da jetzt ein Problem.

BTW setze ich voraus, das jemand erst alles liest und dann loslegt.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#9
  Alt 22. Sep 2003, 09:34
Seite 5: du schreibst du zuerst die C-Deklaration der Thread-Funktion, dann den Hinweis, dass die Aufrufkonvention in Delphi stdcall sein muss und dann die Delphi-Threadfunktion - ABER: die Delphi-Threadfunktion ist nicht als stdcall deklariert, da dieser TThreadFunc-Typ nur im Zusammenhang mit BeginThread verwendet wird und diese eine eigene Wrapper-Funktion verwendet.
Ich finde diese Kombination aus dem Hinweis auf die Aufrufkonvention und der Delphi-Deklaration ohne stdcall doch irgendwie irreführend...

Seite 9:
Zitat:
Den einzelnen Prozessen werden durch den Scheduler einzelne Zeitscheiben zugewiesen. Läuft ihre Zeitscheibe ab, so werden sie unterbrochen und ein anderer Prozess erhält eine Zeitscheibe.
Ein Prozess selbst kann doch keine Zeitscheibe erhalten, da ein Prozess selbst nie Code ausführt, sondern immer nur dessen Threads.. oder irr ich mich da jetzt?

Seite 16:
Zitat:
Windows stellt keine Funktion zur Verfügung, mit der sich die Prioritätsstufe eines Threads ermitteln lässt. [..]
Funktion gibt es keine, aber ich hab trotzdem eine interessante Doku dazu gefunden: http://msdn.microsoft.com/library/de...priorities.asp

Seite 22:
Zitat:
Grundlage ist die Datenstruktur CRITICAL_SECTIONS. Sie ist nicht dokumentiert, da Microsoft der Meinung ist, dass sie vom Programmierer verstanden werden müsste.
Ein kleines Paradoxon..

Abgesehen von ein paar kleinen Tipp-Fehlern hab ich sonst nix mehr gefunden... 8)
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#10
  Alt 22. Sep 2003, 09:44
Zitat von Motzi:
Seite 5: du schreibst du zuerst die C-Deklaration der Thread-Funktion, dann den Hinweis, dass die Aufrufkonvention in Delphi stdcall sein muss und dann die Delphi-Threadfunktion - ABER: die Delphi-Threadfunktion ist nicht als stdcall deklariert, da dieser TThreadFunc-Typ nur im Zusammenhang mit BeginThread verwendet wird und diese eine eigene Wrapper-Funktion verwendet.
Ich finde diese Kombination aus dem Hinweis auf die Aufrufkonvention und der Delphi-Deklaration ohne stdcall doch irgendwie irreführend...
Ja, das müßte ich noch irgendwie klarer machen. Evenzuell in dem ich erst noch die Delphi Deklaration von CreateThread aufführe.

Zitat:
Seite 9:
Zitat:
Den einzelnen Prozessen werden durch den Scheduler einzelne Zeitscheiben zugewiesen. Läuft ihre Zeitscheibe ab, so werden sie unterbrochen und ein anderer Prozess erhält eine Zeitscheibe.
Ein Prozess selbst kann doch keine Zeitscheibe erhalten, da ein Prozess selbst nie Code ausführt, sondern immer nur dessen Threads.. oder irr ich mich da jetzt?
Du irrst nicht. Habe ich ja auch geschrieben, dass der Prozess nur ein Container für die Threads ist. An der Stelle müßte es also Thread heißen und nicht Prozess.

Zitat:
Seite 16:
Zitat:
Windows stellt keine Funktion zur Verfügung, mit der sich die Prioritätsstufe eines Threads ermitteln lässt. [..]
Funktion gibt es keine, aber ich hab trotzdem eine interessante Doku dazu gefunden: http://msdn.microsoft.com/library/de...priorities.asp
Mal kucken. Halt, das sind die Prioritätesklassen. Die Prioritätsstufe eines Threads wird aus der Basispriorität des Prozesses und der relativen Priorität des Threads gebildet. Sie Tabelle Seite 15. Die Tabelle im MSDN liefert zwar eine Zuordnung, man kann sie aber nicht abfragen. Im Endeffekt ist es die gleiche Tabelle wie bei mir auf Seite 15.

Zitat:
Seite 22:
Zitat:
Grundlage ist die Datenstruktur CRITICAL_SECTIONS. Sie ist nicht dokumentiert, da Microsoft der Meinung ist, dass sie vom Programmierer verstanden werden müsste.
Ein kleines Paradoxon..
Kein Paradoxon, wenn man berückstichtig, dass da ein "nicht" fehlt.
Zitat:
Abgesehen von ein paar kleinen Tipp-Fehlern hab ich sonst nix mehr gefunden... 8)
Die will ich auch. Die Rechtschreibüberprüfung von OpenOffice scheint nicht so das ware zu sein.
Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz