![]() |
Delphi-Version: 7
Result als mehrdimensoiertes array im Thread
Hi, zur Zeit hänge ich an dieses Problem.
Ich bekomme im Mainthread immer ein leeres array zurück! Im thread selbst wird es gefüllt. Nun weiß ich nicht mehr weiter!
Delphi-Quellcode:
Dabei hab ich festgestellt,
...
..... type tarray = array[1..4] of array of Boolean; .... .... private fisfilea: tarray;/ ..... ..... function Getfile: tarray; public property isfile: tarray read Getfile; .... .... procedure TLwThread.Execute; var i, x: Integer; begin try while not Terminated do begin if (WaitForSingleObject(FEvent, INFINITE) = WAIT_OBJECT_0) and not Terminated then begin for i:= 1 to 4 do begin if FileList[i].Count > 0 then begin for x:= 0 to FileList[i].Count -1 do begin if FileExists(FileList[i].Strings[x]) then fisfilea[i][x]:= True else fisfilea[i][x]:= False; end; end; end; // Getfile; end; Sleep(1); end; except Finished; end; ..... ..... ..... function TLwThread.Getfile: tarray; var i, x: Integer; begin for i:= 1 to 4 do begin SetLength(Result[i], Length(fisfilea[i])); //for x:= 0 to high(Result[i]) do begin Result[i]:= Copy(fisfilea[i]); end; end; // if Length(fisfilea[1]) > 0 then // Result:=fisfilea; end; das "wahrscheinlich" das array in der function Getfile leer ist, obwohl es in execute gefühlt wird. Allerdings weiß ich auch nicht so recht wie die Übergabe erfolgt! wer kann da helfen Gruß |
AW: Result als mehrdimensoiertes array im Thread
Zum einen fehlt mir das setlength im .Execute zum anderen würde ich einen Pointer übergeben. Diesen Kopierschritt halte ich für viel zu fehleranfällig.
Gruß k-H |
AW: Result als mehrdimensoiertes array im Thread
Wie synchronisierst Du denn den Mainthread mit dem nebenläufigen Thread? Der Mainthread sollte ja erst dann auf das Ergebnis Deines Threads zugreifen, wenn dieser auch wirklich durch die Excute-procedure durchgelaufen ist. Falls der Mainthread vorher zugreift, ist das Ergebnis natürlich leer.
|
AW: Result als mehrdimensoiertes array im Thread
Zitat:
Pointer mh? :gruebel: Zitat:
Hatte zwar was gefunden im Inet, bezog sich aber auf ein eindimensionales Array, deshalb noch die Fragmente in Getfile! Gruß |
AW: Result als mehrdimensoiertes array im Thread
Gleichzeitige Zugriffe auf eine Variable aus zwei Threads.
Was sollte man da wohl drumrum machen? :roll: |
AW: Result als mehrdimensoiertes array im Thread
Zitat:
Wo hab ich was übersehen:?::gruebel: Gruß |
AW: Result als mehrdimensoiertes array im Thread
|
AW: Result als mehrdimensoiertes array im Thread
Zitat:
Aber es geht erst mal um den Getter! Gruß |
AW: Result als mehrdimensoiertes array im Thread
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt steh ich richtig aufn Schlauch!!!!!
Beim Check des ganzen, hab ich festgestellt das im execute nur kurz Werte vorhanden sind!? Dann kommt es zu mehrerern durchläufen wo keine Werte da sind. irgendwann sind werte wieder da, aber auch nur kurz. Danach wieder weg! Der Setter wird vom Mainthread nur einmal aufgerufen, wenn dort die Filelist gefühlt wird. ansonsten nur wenn sich was in der dortigen Filelist was ändert. Und dies hat bestimmt nix mit fehlender Sicherheit zu tun. CriticalSection, usw. Irgendwo hab ich einen Fehler! Ich hänge mal die Pas mit an. Gruß |
AW: Result als mehrdimensoiertes array im Thread
Den Anhang habe ich mir jetzt noch nicht angesehen, aber am gestrigen Schnipsel fand ich eigenartig, dass im Getter der Speicher reserviert wird und der Thread selbst nur auf das private Array zugreift.
Vielleicht liegt da ja das Problem. PS: Reserviert SetLength evtl. sogar neuen Speicher, wenn sich die bisherige Größe dadurch gar nicht ändert? Bin hier unsicher. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 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