Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi thread erstellen (https://www.delphipraxis.net/144110-thread-erstellen.html)

painrestricter 30. Nov 2009 15:10


thread erstellen
 
Hi,

bei mir haperts gerade bisschen am verständnis. Ich hab mir auf delphi treff das tutorial über Threads durchgelesen.
Wollte ich gleich mal ausprobieren. Jedoch brauch ich 200 threads.

Soll ich nun einen thread erstellen und diesen 200 mal aufrufen, zb mit einer for schleife, oder soll ich direkt 200 threads
erstellen? 200 threads einzeln zu erstellen wäre ein bisschen mühsam denke ich, wie kann man das machen?

danke :)

turboPASCAL 30. Nov 2009 15:13

Re: thread erstellen
 
Zitat:

200 threads.
Wie, was und wozu denn ? Vill. gehts auch einfacher.

Andreas L. 30. Nov 2009 15:14

Re: thread erstellen
 
Unter Win32 kann eine Anwendung maximal 16 (oder waren es 20?) aktive Threads haben. Erzähl doch mal was du mit 200 threads erreichen willst, gibt sicherlich eine bessere Lösung. Ansonsten: ja, du implementierst einen Thread und erzeugst dann mehrere Instanzen davon.

EDIT:
Zitat:

Zitat von Delphi-Hilfe
Die Koordination zu vieler Threads verbraucht beträchtliche CPU-Zeit. Auf einem Ein-Prozessor-System stellen 16 aktive Threads die praktikable Obergrenze dar.


himitsu 30. Nov 2009 15:17

Re: thread erstellen
 
Erstmal scheint mir die Anzahl völlig am Ziel der Threads vorbei zugehn.
Wofür brauchst du denn diese vielen Threads?

Wenn man z.B. 4 Prozessoren/Kerne hat, dann können praktisch immer nur 4 Prozesse/Threads gleichzeitig laufen.
Bei mehr müssen die Threads stückchenweise verteilt/abgearbeitet werden.

Wenn z.B. 2 Threads auf einem Kern liegen, dann werden diese abwechelnd bearbeitet (jeweils ein paar Millisekunden lang der Eine und dann wieder der Andere.


Hier würde ich mir eine Liste anlegen, wo die 200 Aufgaben drinstehn
und dann holt sich ein/mehrere Threads (maximal soviele wie CPUs/Kerne) sich dort eine Aufgabe raus, bearbeitet diese und holt sich dann die nächste Aufgabe, bis die Liste (Queue) leer ist.

PS: Windows sollte schon mehr als 16/20 Threads verkraften (vorallem wenn ein Großteil nicht viel zu tun hat ... jeder Prozeß hat mindestens einen Threads und du kannst hunderte/tausende Programme gleichzeitig ausführen)

painrestricter 30. Nov 2009 17:11

Re: thread erstellen
 
naja wie soll ich das sagen, ich will 200 verbindungen zu einem webservice aufbauen, so ähnlich soll dass dann ausschauen

SirThornberry 30. Nov 2009 17:30

Re: thread erstellen
 
für 200 Verbindungen braucht man doch aber keine 200 Threads. Wenn du 20 Label auf dein Formular packst brauchst du doch auch keine 20 Threads dafür.

mjustin 30. Nov 2009 18:16

Re: thread erstellen
 
Zitat:

Zitat von painrestricter
Hi,

bei mir haperts gerade bisschen am verständnis. Ich hab mir auf delphi treff das tutorial über Threads durchgelesen.
Wollte ich gleich mal ausprobieren. Jedoch brauch ich 200 threads.

Soll ich nun einen thread erstellen und diesen 200 mal aufrufen, zb mit einer for schleife, oder soll ich direkt 200 threads
erstellen? 200 threads einzeln zu erstellen wäre ein bisschen mühsam denke ich, wie kann man das machen?

danke :)

Stimmt - wenn man tausend Labels auf einem Formular erzeugen will, macht man das ja auch nur im Notfall manuell :)

Man kann eine Threadklasse einmal schreiben, und von dieser dann in einer Schleife beliebig viele erzeugen.

Jeder Thread kann dann entweder sofort ei der Erzeugung auch gestartet werden, oder man kann alle erst einmal z.B. in eine TObjectList aufnehmen und dann der Reihe nach starten.

Wichtig ist dass alle Objekte ausserhalb der Threads threadsicher angesprochen werden (GUI und gemeinsam genutzte Daten).

Ich nehme an es wird ein Stresstest für einen Web Service?

Cheers,

painrestricter 30. Nov 2009 20:11

Re: thread erstellen
 
naja, na gut, es geht eben darum, meinen flooder weiter auszubauen, ich habe mir mehrere flood arten geschrieben (icmp, http, ping, syn) und will jetzt mit mehreren threads flooden. (nur zu übungszwecken und MEINEN root (unlimited traffic, sonst würd ich mich ja ruinieren^^)

wie ich das anstell, das ist mein problem.

Zitat:

Man kann eine Threadklasse einmal schreiben, und von dieser dann in einer Schleife beliebig viele erzeugen.
genau so hab ich mir das auch vorgestellt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 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