Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Result als mehrdimensoiertes array im Thread (https://www.delphipraxis.net/191332-result-als-mehrdimensoiertes-array-im-thread.html)

alfold 3. Jan 2017 15:39

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:
...
.....

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;
Dabei hab ich festgestellt,
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ß

p80286 3. Jan 2017 16:45

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

samso 3. Jan 2017 16:57

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.

alfold 3. Jan 2017 17:13

AW: Result als mehrdimensoiertes array im Thread
 
Zitat:

Zitat von p80286 (Beitrag 1357965)
Zum einen fehlt mir das setlength im .Execute ...
k-H

befindet sich im setter.
Pointer mh? :gruebel:

Zitat:

Zitat von samso (Beitrag 1357973)
Wie synchronisierst Du denn den Mainthread mit dem nebenläufigen Thread?.

Der Thread läuft selbstständig um den Mainthread nicht abhängig zu machen. Der Thread erhält lediglich die Listen vom Mainthread.

Hatte zwar was gefunden im Inet, bezog sich aber auf ein eindimensionales Array, deshalb noch die Fragmente in Getfile!

Gruß

himitsu 3. Jan 2017 18:04

AW: Result als mehrdimensoiertes array im Thread
 
Gleichzeitige Zugriffe auf eine Variable aus zwei Threads.

Was sollte man da wohl drumrum machen? :roll:

alfold 3. Jan 2017 18:20

AW: Result als mehrdimensoiertes array im Thread
 
Zitat:

Zitat von himitsu (Beitrag 1357982)
Gleichzeitige Zugriffe auf eine Variable aus zwei Threads.

Was sollte man da wohl drumrum machen? :roll:

Sitze schon seit tagen dran! Neu geschrieben x mal geändert usw.
Wo hab ich was übersehen:?::gruebel:

Gruß

himitsu 3. Jan 2017 18:38

AW: Result als mehrdimensoiertes array im Thread
 
Hier im Forum suchenCriticalSection
Delphi-Referenz durchsuchenSyncObjs
Delphi-Referenz durchsuchenTCriticalSection
MSDN-Library durchsuchenEnterCriticalSection
Delphi-Referenz durchsuchenTMultiReadExclusiveWriteSynchronizer
...

alfold 3. Jan 2017 19:50

AW: Result als mehrdimensoiertes array im Thread
 
Zitat:

Zitat von himitsu (Beitrag 1357982)
Was sollte man da wohl drumrum machen? :roll:

Ja kommt noch im Original:wink:
Aber es geht erst mal um den Getter!

Gruß

alfold 4. Jan 2017 09:24

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ß

stahli 4. Jan 2017 09:56

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 00:27 Uhr.
Seite 1 von 2  1 2      

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