Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Tutorials und Kurse (https://www.delphipraxis.net/36-tutorials-und-kurse/)
-   -   Delphi Thread Programmierung unter Windows mit Delphi (https://www.delphipraxis.net/9238-thread-programmierung-unter-windows-mit-delphi.html)

Luckie 21. Sep 2003 13:46


Thread Programmierung unter Windows mit Delphi
 
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.

Chewie 21. Sep 2003 14:41

Re: Thread Programmierung unter Windows mit Delphi
 
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 :shock:

So, mal schauen, welche Fehler Matthias Simmack noch alle findet :mrgreen:

TheMiller 21. Sep 2003 16:38

Re: Thread Programmierung unter Windows mit Delphi
 
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...

MathiasSimmack 21. Sep 2003 16:54

Re: Thread Programmierung unter Windows mit Delphi
 
Zitat:

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 ... :roll:

Luckie 21. Sep 2003 19:14

Re: Thread Programmierung unter Windows mit Delphi
 
Zitat:

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? :gruebel:
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 :shock:
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 :mrgreen:
Schon hast du dich dusqualifiziert. :mrgreen:

Stanlay Hanks 21. Sep 2003 19:27

Re: Thread Programmierung unter Windows mit Delphi
 
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 :hi:

Chewie 21. Sep 2003 19:43

Re: Thread Programmierung unter Windows mit Delphi
 
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.

Luckie 21. Sep 2003 20:25

Re: Thread Programmierung unter Windows mit Delphi
 
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.

Motzi 22. Sep 2003 09:34

Re: Thread Programmierung unter Windows mit Delphi
 
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)

Luckie 22. Sep 2003 09:44

Re: Thread Programmierung unter Windows mit Delphi
 
Zitat:

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. :mrgreen:
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr.
Seite 1 von 4  1 23     Letzte »    

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