so, mein code sieht nun wie folgt aus:
Delphi-Quellcode:
type
TgmDownload = record
Event: TEvent;
Thread: TevtThread;
end;
var
FgmDownload: array of TgmDownload;
procedure TfrmMain.Button5Click(Sender: TObject);
var dw: DWORD;
EventList: array[0..1] of THandle; [b]// MUSS konstant sein da sonst WAIT_OBJECT_0 + Length(EventList) meckert! :([/b]
i: integer;
begin
FDLAbort := False;
button1.Enabled := False;
FDLThreads := strtoint(edtDLThreads.Text);
SetLength(FgmDownload, FDLThreads); //Hier wird dann die Länge vom dyn. Array gesetzt
// SetLength(EventList, FDLThreads); // würde ich gerne machen :)
for i := 0 to FDLThreads - 1 do
begin
FgmDownload[i].Event := TEvent.Create(nil, False, False, ''); //wird hier nämlich sowieso überschrieben
FgmDownload[i].Thread := TEvtThread.Create(FgmDownload[i].Event);
EventList[i] := FgmDownload[i].Event.Handle;
end;
try
while FDLThreads > 0 do begin
// warten auf Thread oder Input
dw := MsgWaitForMultipleObjects(2, EventList, False,
WF_TIMEOUT {INFINITE}, QS_ALLINPUT);
case dw of
WAIT_OBJECT_0 + 0: showmessage('1. Thread');
WAIT_OBJECT_0 + 1: showmessage('2. Thread');
WAIT_OBJECT_0 + Length(EventList): HandleDLUI;
WAIT_TIMEOUT: HandleDlUI;
else
// Fehler auslösen (Notausgang)
Break;
end;
end;
finally
// ev1.Free;
// ev2.Free;
// t1 := nil;
// t2 := nil;
showmessage('blubb');
gridDL.DeleteRow(0);
button1.Enabled := True;
end;
end;
Nun habe ich folgendes Problem, wenn ich im edit "edtDLThreads" 1 Thread festlege passiert nichts, wenn ich eine 2 festlege macht er 2 Threads (beide Showmessages kommen) !?
Ausserdem kann ich das lokale array
EventList nicht dynamisch machen weil er bei
WAIT_OBJECT_0 + Length(EventList): HandleDLUI; einen Konstanten ausdruck braucht!
Vielen dank für deine Hilfe!