Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Auf Thread warten (https://www.delphipraxis.net/78602-auf-thread-warten.html)

RWarnecke 7. Okt 2006 17:44


Auf Thread warten
 
Hallo,

ich komme leider nicht weiter. Ich möchte das Beispiel CopyFileEx von Luckies Seite in eine FOR-Schleife packen. Bei der folgenden Procedure würden ja mehrere Threads hintereinander aufgemacht werden : (die StringListe wird beim starten des Programms gefüllt)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Params: PCopyEx;
  ThreadID: Cardinal;
  FileList : TStringList;
begin
  cancelCopy := False;
  FileList := TStringList.Create;
  New(Params);
  for i := 0 to FileList.count - 1 do
  begin
    Params.Source := 'H:\Videos ungebrannt\' + FileList.Strings[i];
    Params.Dest := 'J:\' + Filelist.Strings[i];
    Params.Handle := Handle;
    CloseHandle(BeginThread(nil, 0, @CopyExThread, Params, 0, ThreadID));
  end;
end;
Wie kann ich nach dem Befehl CloseHandle warten bis der Thread zu Ende ist ?

richie 7. Okt 2006 18:29

Re: Auf Thread warten
 
Vielleicht hilft Delphi-Referenz durchsuchenWaitFor.

Zacherl 7. Okt 2006 18:30

Re: Auf Thread warten
 
Oder WaitForSingleObject ...

RWarnecke 7. Okt 2006 18:51

Re: Auf Thread warten
 
Wenn ich das ganze so mache, wird immer erst die Datei kopiert nachdem der TimeOut abgelaufen ist :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Params: PCopyEx;
  ThreadID: Cardinal;
  FileList : TStringList;
  wf : DWORD
  hThread : THandle;
begin
  cancelCopy := False;
  FileList := TStringList.Create;
  New(Params);
  for i := 0 to FileList.count - 1 do
  begin
    Params.Source := 'H:\Videos ungebrannt\' + FileList.Strings[i];
    Params.Dest := 'J:\' + Filelist.Strings[i];
    Params.Handle := Handle;
    hThread := BeginThread(nil, 0, @CopyExThread, Params, 0, ThreadID);
    if hThread <> INVALID_HANDLE_VALUE then
    begin
      wf := WaitForSingleObject(hThread, 5000);
      case wf of
        WAIT_OBJECT_0: ShowMessage('Datei wurde kopiert');
        WAIT_TIMEOUT: ShowMessage('TimeOut');
        WAIT_FAILED: ShowMessage('Fehler');
      end;
      CloseHandle(hThread);
    end;
  end;
end;
Was mache ich falsch ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz