![]() |
WaitForMultipleObjects wartet nicht
Ich habe das Problem, dass WaitForMultipleObjects nicht wartet. :(
Delphi-Quellcode:
Ich durchsuche alle verfügbaren Laufwerke nach bestimmten Dateien. Damit das schneller geht erstellt der Thread FindFilesThread für jedes Laufwerk einen Thread. Jeder Thread schreibt seine gefundenen Dateien in eine Stringlist. Ich habe ein Array von Stringlisten. Jeder Thread bekommt seine StringListe zugewiesen, in die er schreibt. Wenn alle Threads fertig sind, will ich in einer Schleife alle StringListen durchgehen und sie in einen Listview eintragen. Dazu muss ich aber warten bis alle Threads fertig sind - und genau das klappt nicht.
function FindFilesThread(p: Pointer): Integer;
var i : Integer; cntFileLists : Integer; DriveArray : TStringDynArray; HandleArray : array of THandle; ThreadID : Cardinal; WorkingThreadParams: PWorkingThreadParams; wfmo: DWORD; begin cntFileLists := PThreadParams(p)^.cntFileLists; SetLength(FileList, cntFileLists); SetLength(DriveArray, cntFileLists); DriveArray := PThreadParams(p)^.DriveArray; Setlength(HandleArray, cntFileLists); for i := 0 to cntFileLists - 1 do begin GetMem(WorkingThreadParams, sizeof(TWorkingThreadParams)); FileList[i] := TStringList.Create; WorkingThreadParams.Index := i; WorkingThreadParams.Drive := DriveArray[i]; WorkingThreadParams.Filter := PThreadParams(p)^.Filter; HandleArray[i] := BeginThread(nil, 0, @WorkingThread, WorkingThreadParams, 0, ThreadID); end; wfmo := WaitForMultipleObjects(length(HandleArray), @HandleArray, True, INFINITE); if wfmo = WAIT_OBJECT_0 then Messagebox(0, 'fertig', 'Test', 0); FreeMem(p, sizeof(TThreadParams)); result := 0; end; Rufe ich nach
Delphi-Quellcode:
GetLastError auf bekomme ich den Fehler, dass das Handle ungültig sei.
wfmo := WaitForMultipleObjects(length(HandleArray), @HandleArray, True, INFINITE);
Ich debugge das jetzt schon über eine Stunde und finde den Fehler nicht. :wall: |
Re: WaitForMultipleObjects wartet nicht
Zitat:
|
Re: WaitForMultipleObjects wartet nicht
Er ist nie da, aber wenn man ihn dann mal braucht, taucht er aus dem Nichts auf und hat die Lösung. :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:53 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