Autor Beitrag
theo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62

Win 2000, XP, Vista; Win 7
Delphi 6, 7, 2010, MSSQL, Firebird, DevExpress
BeitragVerfasst: Mo 17.09.07 14:48 
Hallo!

Ich habe folgende Aufgabenstellung:

Anzeige von ca. 500 Messwerten im Netz (über HTTP erreichbar). Die Antwortzeit pro Messstelle beträgt zwischen 500 ms und 1s.

Meine Idee:
Pro Messstelle einen Thread erzeugen.

Meine Frage, sind 500 Threads durch den Hauptthread händelbar, oder ist das System dann mit dem verwalten der Threads beschäftigt?
Stefan.Buchholtz
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 612

WIN 2000, WIN XP, Mac OS X
D7 Enterprise, XCode, Eclipse, Ruby On Rails
BeitragVerfasst: Mo 17.09.07 14:59 
Wenn die Threads alle gleichzeitig was machen, hast du schon einen erheblichen Verwaltungsaufwand. Sind von den 500 Threads immer die meisten mit Warten beschäftigt, ist das denke ich weniger ein Problem.
Ich würde es so machen, dass eine konfigurierbare Maximalzahl von Threads gleichzeitig existiert - dann kannst du das beste Laufzeitverhalten durch Experimente ermitteln.

Stefan

_________________
Ein Computer ohne Windows ist wie eine Schokoladentorte ohne Senf.
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Mo 17.09.07 15:05 
Dadurch, dass die Threads warten müssen, kann man für 500 Threads und einer Wartezeit von 500-1000ms doch theoretisch einen Timer benutzen, der alle 50ms einen neuen Thread erzeugt... dadurch warten die anderen während dieser Zeit und die Arbeit verlagert sich
theo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62

Win 2000, XP, Vista; Win 7
Delphi 6, 7, 2010, MSSQL, Firebird, DevExpress
BeitragVerfasst: Mo 17.09.07 15:22 
Danke Stefan.

Deine Idee klingt gut.

Ich habe jetzt einen Test gemacht.
- 500 Threads mit sleep(10) im Execute als Schleife

Ergebnis:
- sehr langer Programmstart
- beim Programmende kommt eine Fehlermeldung von IDE "Prozessbeendigung dauert zu lange"
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: Mo 17.09.07 15:40 
ads ist ja auch nicht das was ich meine...
eher so, dass du eine Variable i zu Form1 hinzufügst und dann einen Timer nimmst, der bis i 500 ist die besagten neuen Threads erstellt... Sonst werden einfach nur Threads erstell und mit sleep wird der ganze Programmablauf gestoppt...
Außerdem bin ich Wolle und nicht Stefan ;)
theo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62

Win 2000, XP, Vista; Win 7
Delphi 6, 7, 2010, MSSQL, Firebird, DevExpress
BeitragVerfasst: Mo 17.09.07 15:52 
user profile iconWolle92 hat folgendes geschrieben:
Außerdem bin ich Wolle und nicht Stefan ;)


Ich habe mich auch auf den Beitrag von Stefan bezogen.

Ich werde folgende Variante testen:

- Datenspeicher für 500 Werte ( array[0..499] of .. )
- Index auf die nächste Speicherzelle
- variable Anzahl von Threads
- Starten des Threads für eine Speicherzelle --> Index erhöhen, bzw. zurück zum Anfang
- Bei Threadende --> Restart für neue Speicherzelle lt. Index

Wenn ich das Ergebnis habe gebe ich Euch bescheid.