Delphi-PRAXiS
Seite 2 von 4     12 34      

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)

Motzi 22. Sep 2003 10:03

Re: Thread Programmierung unter Windows mit Delphi
 
Zitat:

Zitat von Luckie
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.

Ja.. zuerst die Delphi-Deklaration von CreateThread und dann der Übergang auf BeginThread, wobei ich das nicht nur in einem kleinen Hinweis machen würde! Vielleicht auch noch mit der Deklaration von BeginThread...

Zitat:

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.
Ja, es gibt keine Funktion um sie abzufragen, und die Tabelle ist (mit ein paar Unterschieden) fast dieselbe wie in deinem PDF (bzw dieselbe wie im Buch von Jeffrey Richter), nur dass sie noch ein bisschen detailierter ist. Aber die Tatsache, dass MS sich vorbehält den Algo jederzeit zu ändern hat mich davon ausgehen lassen, dass es keine offiziellen Dokus dazu gibt. Aber anscheinend hab ich mich geirrt...

Zitat:

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.
Ok... *nochmalaufdiesuchemach* ;)

Luckie 22. Sep 2003 10:09

Re: Thread Programmierung unter Windows mit Delphi
 
Der Algorithmus, wie die Tabelle zustandekommt ist nicht dokumentiert. MS will sich vorbehalten diesen jeder Zeit zuänder. Und wenn du dein Programm jetzt von den Stufen abhängig machst, kann das ins Auge gehen in Zukünftigen Versionen.

Motzi 22. Sep 2003 11:18

Re: Thread Programmierung unter Windows mit Delphi
 
Ich weiß.. und genau deswegen dachte ich auch das es keine offiziellen Dokus darüber gibt. Aber ich hab mich anscheinend getäuscht... ;)

Wegen Tippfehlern:
Seite 6:
Zitat:

Man sollte möglichst keine globalen variablen verwenden, [..]
Seite 9:
Zitat:

Beim preemtiven Multitasking - im Gegensatz zum kooperativen Mutlitasking, wie Windows eins ist, [...]
Diese Satzkonstruktion is nicht ganz glücklich... ;)
Seite 16:
Zitat:

Nachträglich kann dir Prioritätsklasse mit der Funktion SetPriorityClass geändert werden
Seite 16:
Zitat:

Das Gegenstück dazu ist die Funktion GetPriorityClass, welchen die Prioritätsklasse von dem mit hProcess angegebenen Prozess zurück gibt
Seite 17:
Zitat:

Da diese dynamische Anhebung kann laut einiger Entwickler zu einem nachteiligen Leistungsverhalten der eigenen Anwendung führen
Seite 17:
Zitat:

Bemerkt das System, dass ein Thread über drei bis vier Sekunden derart blockiert wird, setzt es die Prioritätsstufe des Threads für zweit aufeinanderfolgende Zeitscheiben auf die Stufe 15 und senkt sie danach sofort wieder auf die Basispriorität ab
Seite 19:
Zitat:

[..]nicht mehr 2 sondern 1! das Ergebnis hängt[..]
Kapitel 4.2 - Kritische Abschnitte:
kritische Abschnitte sollten immer in einem Resource-Schutz-Block gekapselt sein, damit auch im Falle eines Fehlers die critical section wieder verlassen wird!
Seite 22:
Zitat:

So bald die kritischen Abschnitte nicht mehr gebraucht werden [..]
Seite 22:
Zitat:

EnterCriticalSection untersucht dabei die Elementvariablen der CRITICAL_SECTION-Struktur und entnimmt ihnen den Zustand der Resourcen
Seite 22:
Zitat:

Zeigt das Element an, dass der aufrufende Thread schon Zugang zu den Resourcen hat, wird der Zähler erhöht,d er festhält wie oft[..]
Generell hast du relativ viele Fehler mit "zuviel" Leerzeichen.. jetzt mal ohne Seitenangaben:
wie viel -> wieviel
in sofern -> insofern (zB Seite 12)
so bald -> sobald

Mehr ist mir momentan nicht aufgefallen...

Luckie 22. Sep 2003 11:59

Re: Thread Programmierung unter Windows mit Delphi
 
Die Leertaste ist eben so groß, die trifft man so leicht. :roll:

Phoenix 22. Sep 2003 13:56

Re: Thread Programmierung unter Windows mit Delphi
 
Und den Button um hier zu posten trifft man auch immer gerne doppelt, gelle? ;-)

Seite 5:
Zitat:

Sie können den selbe Code ausführen...
Zitat:

..., wird auch der Prozess beendet und der Adressraum des Prozesses freigegeben..
Seite 11:
Zitat:

Oft findet man zu diesem Zweck Code wie diesem:
Seite 14:
Zitat:

..."Anhaben der Zeitplanungspriorität" verfügt. Standardmäßig haben diese Berechtigung Mitglieder Gruppe Administratoren und Hauptbenutzer.
Seite 15:
In der Tabelle würde ich den Normalfall (Normal / Normal. Priorität 8 ) noch herausheben.

Seite 17, Kontext:
Zitat:

In Folge eines Tastendrucks, welcher dazu führt, dass eine WM_KEYDOWN Nachricht in die 'Warteschlange eingereiht wird.
Der Satz hört imho ein wenig zu unvermittelt auf.

Zitat:

Da diese dynamische Anwendung kann zu (...) führen.
Auf Seite 18 gehört der Hinweis mit dem Problemen beim starten aus der IDE imho nicht in das Tut, sondern gelöst ;-)

Seite 22, oben:
Im Code auf Seite 21 heisst der Datentyp RTL_CRITICAL_SECTION, im Text wird auf Seite 22 nur CRITICAL_SECTION genannt. Was ist nun richtig?

Seite 23:
Zitat:

... da es nutzlos ist in diesem Fall einen SpinLockzähler zusetzten:
Seite 24:
Das Stichwortverzeichnis hat eine Gliederungsebene zu viel (nie mehr als 2, lernt man recht früh wenn man professionelle Dokus macht). Zudem sind die Gliederungsebenen ungleichmäsig eingerückt.

Selbst wenn Du auf 3 Ebenen bestehst (die machen imho nur wenig Sinn) sollte jede Ebene auf der ganzen Seite gleich weit eingezogen sein. Vor allem unter Synchronisation fällt das extrem auf und macht den Index unübersichtlich und somit unnütz. (Sorry, ich beschäftige mich gerade mit dem Layout professioneller technischer Dokumentationen ;-) ).

Aber das wars dann auch von mir. Hab ne Menge draus gelernt :)

Luckie 22. Sep 2003 14:01

Re: Thread Programmierung unter Windows mit Delphi
 
Puh, danke, dann werde ich mich gleich mal ransetzten und die Fehler ausbügeln.

Was das Demo angeht: Na dann mach mal. Es hat schon mal aus der IDE funktioniert.

Luckie 3. Nov 2003 07:43

Re: Thread Programmierung unter Windows mit Delphi
 
So, ich darf euch eine überarbeitet Fassung meines Threading Tutorials präsentieren. Es wurde grundlegend überarbeitet und ergänzt mit ein paar Worten zum dem VCL Thread-Objekt.

aus dem Inhalt:
– Grundlagen der Thread Programmierung
– Thread-Ablaufsteuerung
– Thread-Prioritäten
– Thread-Synchronisation
– Das Thread Objekt der VCL

Demos:
- CriticalSection
- InterLockedExchangeAdd
- Priority
- SpinLock
- ThreadTimes
- TThreadObject

Es ist jetzt insgesamt 33 Seiten stark.

Hier die Links:
Thread Tutorial Hauptseite
Download des Tutorials (PDF mit Demos / 393 KB)
Tutorial (PDF / 371 KB) zum online lesen.

Luckie 30. Sep 2004 01:23

Re: Thread Programmierung unter Windows mit Delphi
 
Ich habe das Threading Tutorial für Delphi erweitert und überarbeitet.

Es umfasst nun mehr 45 Seiten und 9 Demos (VCL, nonVCL, Konsole) zu den Kapiteln. Aus dem Inhalt:
  • Grundlagen der Thread Programmierung (BeginThread, ...)
  • Thread-Ablaufsteuerung (ResumeThread, SuspendThread)
  • Thread-Prioritäten (SetPriorityClass, SetThreadPriority, ...)
  • Thread-Synchronisation (CriticalSections, InterLockedExchangeXXX, ...)
  • Thread-Synchronisation mit Kernelobjekten (neu in 2.2) (WaitForXXX, CreateEvent, SetEvent)
  • Das Thread Objekt der VCL

Downloadlink: http://tutorials.luckie-online.de

Fragen, Anregungen und Probleme könne entweder hier oder in meinem Support-Forum gestellt werden.

PRehders 30. Sep 2004 08:33

Re: Thread Programmierung unter Windows mit Delphi
 
Hallo Michael,

ein wirklich schönes Tutorial! Da kann ich wirklich einiges an Honig für mein Projekt draus ziehen! :thumb:
Ich habe im Thread gelesen, dass du auch möglichst alle Vertipper genannt haben möchtest.. ;-)
leider würde sich mein Post dann hier ziemlich in die Länge ziehen, daher ein Vorschlag: Wenn du mir eine Word-/RTF- oder andere bearbeitbare Version zur Verfügung stellst, korrigiere ich sie kurz durch und sende sie zurück. Ist glaube ich einfacher für alle Beteiligten;
es sein denn, die anderen möchten die Korrekturen auch alle "in situ" sehen...

Bei Interesse einfach melden.

Grüße aus Hamburg.

Peter

Luckie 30. Sep 2004 12:57

Re: Thread Programmierung unter Windows mit Delphi
 
Ui. So viele Vertipper? Ich könnte es höchstens als OpenOffice Dokumnet zur Verfügung stellen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr.
Seite 2 von 4     12 34      

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