![]() |
Re: Prüfen wann alle Threads beendet wurden
hallo,
ich hab das ganze nun mal mit WaitForMultipleObjects probiert, allerdings scheint hier nicht wirklich gewartet zu werden =( mein code ist folgender:
Delphi-Quellcode:
jemand eine idee wo nun der denkfehler ist?
procedure TMainForm.LunchThreadds;
var i: integer; Mylist: TStringlist; hndlArray : Array of THandle; begin ... //erstmal wird Mylist eingelesen und geschaut ob noch threads laufen ... Setlength(MyThreadArray, StrToInt(edtThreads.Text)); Setlength(hndlArray, StrToInt(edtThreads.Text)); while Mylist.Count-1 > 0 do begin for i := 0 to length(MyThreadArray) - 1 do begin MyThreadArray[i] := TMyThreads.Create(true); MyThreadArray[i].FIndex := i; MyThreadArray[i].FValue := Myylist[0]; MyThreadArray[i].Priority := tpIdle; MyThreadArray[i].FreeOnTerminate := True; hndlArray[i] := MyThreadArray[i].Handle; MyThreadArray[i].Resume; Mylist.Delete(0); end; //die ersten threads durchlaufen und warten bis diese beendet sind //um dann die nächsten threads zu initialisieren WaitForMultipleObjects(StrToInt(edtThreads.Text), @hndlArray, True, 60000); end; Myylist.Free; end; |
Re: Prüfen wann alle Threads beendet wurden
ich hab folgendes tutorial genutzt:
![]() dort steht unter anderem: Zitat:
thread gesetzt ist, das wäre dann also erst der fall wenn er abgearbeitet wurde und genau darauf soll ja nun WaitForMultipleObjects warten :gruebel: |
Re: Prüfen wann alle Threads beendet wurden
also das problem, wie ich mir sagen lassen habe, lag am dynamischen
array das an die api funktion übergeben wird, folgender code funktionier nun anscheinend:
Delphi-Quellcode:
procedure TMainForm.LunchThreads;
var i, hndlArraylength: integer; Mylist: TStringlist; hndlArray : Array[0..63] of THandle; begin ... //prüfen ob threads laufen und stringliste laden ... Setlength(ThreadArray, 64)); while Mylist.Count > 1 do begin for i := 0 to length(ThreadArray) - 1 do begin ThreadArray[i] := TMyThreads.Create(true); hndlArray[i] := ThreadArray[i].Handle; ThreadArray[i].FIndex := i; ThreadArray[i].FValue := Mylist[0]; ThreadArray[i].Priority := tpIdle; ThreadArray[i].FreeOnTerminate := True; ThreadArray[i].Resume; if Mylist.Count > 1 then Mylist.Delete(0) else break; end; WaitForMultipleObjects(64, @hndlArray, True, 20000); end; Mylist.Free; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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 by Thomas Breitkreuz