AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WaitForMultipleObjects wartet nicht
Thema durchsuchen
Ansicht
Themen-Optionen

WaitForMultipleObjects wartet nicht

Ein Thema von Luckie · begonnen am 15. Dez 2004 · letzter Beitrag vom 15. Dez 2004
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

WaitForMultipleObjects wartet nicht

  Alt 15. Dez 2004, 20:06
Ich habe das Problem, dass WaitForMultipleObjects nicht wartet.
Delphi-Quellcode:
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;
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.

Rufe ich nach
wfmo := WaitForMultipleObjects(length(HandleArray), @HandleArray, True, INFINITE); GetLastError auf bekomme ich den Fehler, dass das Handle ungültig sei.

Ich debugge das jetzt schon über eine Stunde und finde den Fehler nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#2

Re: WaitForMultipleObjects wartet nicht

  Alt 15. Dez 2004, 20:21
Zitat von Luckie:
Ich habe das Problem, dass WaitForMultipleObjects nicht wartet.
Delphi-Quellcode:
  HandleArray : array of THandle;
  //...
  wfmo := WaitForMultipleObjects(length(HandleArray), @HandleArray, True, INFINITE);
Versuche es mit @HandleArray[0], ein dynamisches Array ist nur ein Pointer...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: WaitForMultipleObjects wartet nicht

  Alt 15. Dez 2004, 20:24
Er ist nie da, aber wenn man ihn dann mal braucht, taucht er aus dem Nichts auf und hat die Lösung.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz