![]() |
Multithreading oder falsch verstanden
Ich habe da mal eine Frage.
Ich möchte mich jetzt mit der Thread - Programmierung beschäftigen und frage mich jetzt, ob ich das Thema überhaupt richig verstanden habe. Ein kleines Beispiel: Ich habe ein Programm, welches Daten aus dem Internet lädt. Wenn ich das ganze ohne irgendwelche Threads benutze, hängt sich mein Programm auf, so lange es arbeitet. Persönlich finde ich das überhaupt nicht schön. Jetzt habe ich mir einfach die Komponente "IdThreadComponent" auf meine Form gezogen und das laden der Dateien in die Prozedure "IdThreadComponent1Run" kopiert. Nun starte ich ich diesen "Thread"? mit IdThreadComponent1.Start. Jetzt kann ich das Programm noch bewegen bzw andere Sachen ausgeben lassen, wärend die Daten geladen werden. Jetzt stellt sich mir die Frage, ist das eine richtige Verwendung von einem Thread? Oder haben Threads eigentlich eine andere Aufgabe und mein Beispiel ist nur ein netter Nebeneffekt? Das zweite ist folgendes. Jetzt habe ich zwei Prozeduren, die was anderes machen, aber das Programm zum hängen bringen, wärend die Prozeduren ausgeführt werden. Diese Prozeduren möchte ich aber unabhängig von einander starten können. Wie stelle ich das jetzt an? Muss ich jetzt die IdThreadComponente mehrmals auf meine Form ziehen, oder wie kann ich das Problem lösen? Und die letzte Sache ist folgendes. Ich möchte jetzt mehrere Quelltexte von Seiten laden. Das möchte ich aber nicht hintereinander machen, sondern mit mehreren Threads "gleichzeitig". Doch wie kann ich jetzt mehrere Threads erstellen? Funktioniert das auch mit der IdThreadComponent oder wie stelle ich das an? Und wie weise ich den Threads in meinem Falle die URLs zu? Es handelt sich nur um ein Beispiel. Ob es nun Sinn macht sei dahin gestellt. Aber was besseres viel mir gerade nicht ein :) Ich hoffe, ihr könnt da ein wenig Licht ins Dunkel bringen. |
AW: Multithreading oder falsch verstanden
Erstmal: Ja, Threads sins genau dafür gedacht, mehrere Sachen (quasi-)parallel zu tun. Insbesondere lange Berechnungen oder Downloads von der GUI zu entkoppeln. Der Haiptthread macht dann die GUI und die anderen Threads können sich nur auf "ihre Aufgabe" konzentrieren.
Was die Komponente angeht: Ich würde das ehrlich gesagt ohne machen. Es gibt die Klasse TThread, davon kannst du einfach ableiten. Und dann kannst du auch viele verschiedene Ableitungen machen, die verschiedene Sachen erledigen ;-) |
AW: Multithreading oder falsch verstanden
Ok erst einmal danke für die schnelle Antwort.
Eine Frage habe ich aber noch bezüglich Threads. Nur um ein Beispiel zu nennen. Ich habe eine Procedure die Berechnungen durchführt. Dann habe ich noch eine Procedure die jetzt Dateien aus dem Internet lädt. Beides möchte ich in Threads ausführen, da sonst das Programm hängt. Doch beides soll unabhängig aufgerufen werden. Das Problem, es gibt ja pro Thread Class nur eine Execute Procedure. Wenn ich jetzt die IdThreadComponente benutze, könnte ich diese ja zwei mal auf meine Form ziehen. Doch wenn ich jetzt eine Thread Klasse deklariere, wie mache ich das dann? Muss ich dann da auch mehrere Thread Klassen deklarieren? |
AW: Multithreading oder falsch verstanden
Natürlich - Es sind ja zwei vollkommen verschiedene Arten von Threads.
Außerdem kann so ein TThread natürlich noch mehr als nur sein Execute. Du hast bsp. auch eine onTerminate-Methode in welcher du jetzt auf deiner Form anzeigen lassen kannst, dass der Thread fertig ist. Da soll bei dem einen Thread ja auch etwas anderes passieren (z.B. ein anderes Label aktualisiert werden) als bei dem anderen. |
AW: Multithreading oder falsch verstanden
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz