Autor |
Beitrag |
sPeeD2k5
      
Beiträge: 72
|
Verfasst: Fr 05.09.08 13:11
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 05.09.08 13:17
Und ich kann mir nicht erklären, was die Funktion ishttpsourcethere macht bzw. wo i und j überhaupt deklariert sind.
|
|
sPeeD2k5 
      
Beiträge: 72
|
Verfasst: Fr 05.09.08 13:19
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 05.09.08 13:24
Könntest Du bitte Delphi-Tags für deine Sources verwenden, so wie es Narses so schön für dich immer nachholt?
Erstmal zum Code:
- Zählvariablen gehören NICHT global
- In Proceduren ist kein Result vorhanden
- Könntest Du bitte "funktioniert nicht" etwas genauer definieren?
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 05.09.08 13:26
sPeeD2k5 hat folgendes geschrieben: | I und J sind als globale variablen deklariert... |
Hast du dir die Warnung vom Compiler diesbezüglich mal durchgelesen?
|
|
sPeeD2k5 
      
Beiträge: 72
|
Verfasst: Fr 05.09.08 13:35
ja ich habe sie jetzt nicht mehr als globale variablen.. das ändert aber nix an meinem problem... Ich bekomme immer die Fehlermeldung ReadTimeout... Also er erhält als Responsecode noch 200 OK und an der Stelle kommt dann "Readtimeout blabla"
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 05.09.08 13:58
Viele Server sind relativ langsam. Teilweise kann es durchaus2-3 Sekunden dauern, biss man eine Antwort bekommt. Änder dein Timeout mal auf 5000 oder 15000.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
sPeeD2k5 
      
Beiträge: 72
|
Verfasst: Fr 05.09.08 14:35
alles klar jetzt scheints zu funktionieren  noch eine frage... wie kann ich die aufgaben auf die threads am besten verteileN? also der benutzer soll selber bestimmen können wie viele threads verwendet werden und dementsprechend sollen die abzuarbeitenden ips aufgeteilt werdn
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 05.09.08 15:04
Erzeug eine globale Liste, wo alle IPs drin stehen (oder IP-Bereiche) ... Und aus dieser Liste liest jeder Thread immer einen Auftrag. und schreibt in einer weiteren Liste sein Ergebnis für diesen Auftrag rein.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
sPeeD2k5 
      
Beiträge: 72
|
Verfasst: Fr 05.09.08 15:11
ja sowas habe ich auch schon in der richtung gedacht allerdings is mein problem noch, dass die ips dann teilweise doppelt und dreifach abgearbeitet werden... kann man aus einer bestehenden stringlist viele kleine erzeugen?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 05.09.08 15:52
Wenn in der Liste keine doppelten Einträge vorhanden sind, kannst du die Anzahl der Einträge durch die Anzahl der Threads teilen. Jeder Thread bekommt dann einen Teil der Liste zugeordnet, den er abarbeitet.
Beispiel: 10 Einträge, 5 Threads.
10 : 5 = 2: Jeder Thread bekommt also 2 Einträge
Jetzt zerlegst du die List in fünf kleine Listen mit zwei Einträgen und übergibst jede Liste einem Thread.
|
|
sPeeD2k5 
      
Beiträge: 72
|
Verfasst: Fr 05.09.08 15:58
ja aber wie zerlegt man eine stringliste in mehrere kleine? am besten mit fortlaufender zählvariabel versehen.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 05.09.08 16:11
Ein Ansatz:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| const ANZAHLSTRINGLISTEN = 5
var sl: TStringList; slarray: array of TStringList; i: Integer; AnzahlItems: Integer;
begin sl := TStringList.Create; for i := 0 to 9 do sl.Add(Format('Eintrag %d', [i]));
AnzahlItems := sl.Count / ANZAHLSTRINGLISTEN; Setlength(slarray, anzahl);
for i := 0 to anzahl - 1 do begin slarray[i] := TStringList.Create; end; end; |
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 05.09.08 17:18
Warum nicht einfach eine TCriticalSection nehmen und mit dieser den Zugriff auf die StringList synchronisieren???
Das bietet nicht nur den Vorteil, dass jeder Thread so viel Arbeit machen kann, wie er schafft, ohne dass Dinge doppelt bearbeitet werden, sondern man sogar noch während die Threads arbeiten neue Aufgaben hinzufügen kann.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|