Einzelnen Beitrag anzeigen

quakergod

Registriert seit: 20. Mär 2003
Ort: NRW
129 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Events und Threads in Schleife erzeugen

  Alt 12. Feb 2006, 21:29
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!
I love Delphi-Praxis !
  Mit Zitat antworten Zitat