Autor Beitrag
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mo 10.01.11 18:08 
Hey,

bin im Moment am experimentieren, aber bevor ich viel Arbeit reinstecke und hinterher nichts zu Stande gebracht habe, wollte ich mal kurz nachfragen.
Und zwar will ich eine ganze Form in einen Thread umwandeln (oder zumindest die Funktionen bzw Prozeduren).
Weiß zwar wie ich Threads erstelle, sie funktionieren usw, habe aber selbst noch nicht wirklich damit gearbeitet.
Reicht es, wenn ich einfach alle Forward Deklarationen der Prozeduren bzw der Funktionen in die Thread Klasse verschiebe?
Das Projekt überstreckt sich zumindest über mehrere Units und ich meine mal gehört zu haben, dass alle Prozeduren von Klassen in einer Unit stehen müssten.
Naja vielleicht könnt ihr mir da ja Tipps geben, wie ich das am schnellsten, saubersten und besten hinbekomme.

Lg

henry
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 10.01.11 18:18 
Davon, dass du eine Methode deines Formulars als Methode in die TThread-Klasse legst, wird diese nicht im Kontext des Threads ausgeführt.

Die muss dann auch im Thread aufgerufen werden und den musst du natürlich vorher auch erstellen.

Zudem darfst du aus dem Kontext des Threads keine visuellen Komponenten ansprechen. Das muss (aufwendig) synchronisiert werden, sollte also nicht so oft passieren.

Du wirst wohl zuerst ein wenig an deiner Architektur arbeiten müssen. Insbesondere ist aber die Frage was du denn in einem Thread machen willst.

Alles einfach in einen Thread werfen ist weder möglich noch sinnvoll.
HenryHux Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mo 10.01.11 18:26 
Ok, der Thread würde nur auf eine Listbox zugreifen, entweder könnte ich das ganz weglassen oder ich mache einfach eine Prozedur die nicht in dem Thread ist, welche das dann als Argument hineinschreibt, das dürfte ja nicht viel Zeit kosten bei 2-3 Threads. Mehr an VCL Zugriffen ist nicht drin.
Der Thread soll Bilder bearbeiten, was auch wunderbar alles klappt, deswegen ist mein letztes Ziel das in Threads zu schaffen, damit ich das Programm nicht x-mal öffnen muss.
Die Bilderbearbeitung nimmt aber weder viel Speicher, noch belastet sie die CPU viel.
Ich würde also den (fast) kompletten Programmablauf in den Thread verschieben wollen.
Ist es denn möglich das über mehrere Units zu verteilen?

Zum Ablauf des Programmes : Es werden keine Eingaben vom User berücksichtigt oder auf solche gewartet, es werden lediglich sturr Prozeduren ausgeführt und das in Schleifen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 10.01.11 18:29 
user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
oder ich mache einfach eine Prozedur die nicht in dem Thread ist
Das ist nicht das Entscheidende. Wenn du die im Kontext des Threads aufrufst, dann läuft die auch im Thread. Du musst die synchronisiert mit dem Hauptthread aufrufen. Nur dann läuft die im Kontext des Hauptthreads.

user profile iconHenryHux hat folgendes geschrieben Zum zitierten Posting springen:
Ist es denn möglich das über mehrere Units zu verteilen?
Das hat nichts mit Threads zu tun. Wenn du es in mehreren Units hast, dann kann das auch so bleiben (oder es so machen). :nixweiss:

Es kommt nicht darauf an wo die Methode oder Prozedur steht, sondern woher du sie aufrufst.