AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Multithreading oder falsch verstanden
Thema durchsuchen
Ansicht
Themen-Optionen

Multithreading oder falsch verstanden

Ein Thema von SyntaxXx · begonnen am 1. Mai 2013 · letzter Beitrag vom 3. Mai 2013
Antwort Antwort
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#1

Multithreading oder falsch verstanden

  Alt 1. Mai 2013, 19:32
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Multithreading oder falsch verstanden

  Alt 1. Mai 2013, 19:36
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
  Mit Zitat antworten Zitat
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#3

AW: Multithreading oder falsch verstanden

  Alt 3. Mai 2013, 12:20
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?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Multithreading oder falsch verstanden

  Alt 3. Mai 2013, 12:43
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.

Geändert von Der schöne Günther ( 3. Mai 2013 um 12:58 Uhr) Grund: Zwei Sätze sind besser als einer
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Multithreading oder falsch verstanden

  Alt 3. Mai 2013, 13:17
Schau doch einmal hier vorbei.
Ich finde das recht hilfreich

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


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 21:07 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