type
TgmDownload =
record
Event: TEvent;
EventHandle: THandle;
Thread: TevtThread;
end;
var
FgmDownload:
array of TgmDownload;
//Außerdem wenn die länge variable sein soll dann mach keine Konstanten rein und mach ein Dynamisches Array
procedure TMainform.Button2Click(Sender: TObject);
var dw: DWORD;
FStatus:
array[0..3]
of string;
i: integer;
begin
FDLAbort := False;
button2.Enabled := False;
FDLThreads := strtoint(edtDLThreads.Text);
SetLength(FgmDownload, FDLThreads)
//Hier wird dann die Länge vom dyn. Array gesetzt
try
for i := 0
{Der 1 kann ein Fehler sein, weil des array bei null beginnt} to FDLThreads - 1
do
begin
FgmDownload[i].Event :=
nil;
//Ich glaub die kann man weg lassen
FgmDownload[i].Event := TEvent.Create(
nil, False, False, '
');
//wird hier nämlich sowieso überschrieben
FgmDownload[i].Thread := TEvtThread.Create(FgmDownload[i].Event);
FgmDownload[i].EventHandle := FgmDownload[i].Event.Handle;
end;
while FDLThreads > 0
do begin //Eine Integer Variable sehe aber nirgenwo wo sie kleiner wird (endlosschleife?)
// warten auf Thread oder Input
dw := MsgWaitForMultipleObjects(2, FgmDownload.EventHandle, False, WF_TIMEOUT
{INFINITE}, QS_ALLINPUT);
case dw
of
WAIT_OBJECT_0 + 0: SetNextDLFile(FgmDownload.Thread[0], FStatus[0]);
//Keine Ahnung
WAIT_OBJECT_0 + 1: SetNextDLFile(FgmDownload.Thread[1], FStatus[0]);
WAIT_OBJECT_0 + 2: SetNextDLFile(FgmDownload.Thread[2], FStatus[0]);
WAIT_OBJECT_0 + 3: SetNextDLFile(FgmDownload.Thread[3], FStatus[0]);
WAIT_OBJECT_0 + 4: SetNextDLFile(FgmDownload.Thread[4], FStatus[0]);
WAIT_OBJECT_0 + 5: SetNextDLFile(FgmDownload.Thread[5], FStatus[0]);
WAIT_OBJECT_0 + 6: SetNextDLFile(FgmDownload.Thread[6], FStatus[0]);
WAIT_OBJECT_0 + 7: SetNextDLFile(FgmDownload.Thread[7], FStatus[0]);
WAIT_OBJECT_0 + 8: SetNextDLFile(FgmDownload.Thread[8], FStatus[0]);
WAIT_OBJECT_0 + 9: SetNextDLFile(FgmDownload.Thread[9], FStatus[0]);
WAIT_OBJECT_0 +
{Length(}FgmDownload[?].EventHandle
{)}: HandleDLUI;
//Length von einem Handle???? Des ist schon ne zahl, AUßDERDEM: schlimmer fehler es ist der Array Eintrag (z.b. [1]) nicht angeben d.h. er will des ganze Array ding nehmen und nicht den wert daher kommt wahrscheinlich der fehler
WAIT_TIMEOUT: HandleDlUI;
else
// Fehler
Break;
end;
end;
finally
button2.Enabled := True;
end;
end;