AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Result als mehrdimensoiertes array im Thread

Result als mehrdimensoiertes array im Thread

Ein Thema von alfold · begonnen am 3. Jan 2017 · letzter Beitrag vom 4. Jan 2017
Antwort Antwort
Seite 1 von 2  1 2   
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#1

Result als mehrdimensoiertes array im Thread

  Alt 3. Jan 2017, 15:39
Delphi-Version: 7
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ß
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Result als mehrdimensoiertes array im Thread

  Alt 3. Jan 2017, 16:45
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#3

AW: Result als mehrdimensoiertes array im Thread

  Alt 3. Jan 2017, 16:57
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.
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Result als mehrdimensoiertes array im Thread

  Alt 3. Jan 2017, 17:13
Zum einen fehlt mir das setlength im .Execute ...
k-H
befindet sich im setter.
Pointer mh?

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ß
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#5

AW: Result als mehrdimensoiertes array im Thread

  Alt 3. Jan 2017, 18:04
Gleichzeitige Zugriffe auf eine Variable aus zwei Threads.

Was sollte man da wohl drumrum machen?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Result als mehrdimensoiertes array im Thread

  Alt 3. Jan 2017, 18:20
Gleichzeitige Zugriffe auf eine Variable aus zwei Threads.

Was sollte man da wohl drumrum machen?
Sitze schon seit tagen dran! Neu geschrieben x mal geändert usw.
Wo hab ich was übersehen

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#7

AW: Result als mehrdimensoiertes array im Thread

  Alt 3. Jan 2017, 18:38
Hier im Forum suchenCriticalSection
Delphi-Referenz durchsuchenSyncObjs
Delphi-Referenz durchsuchenTCriticalSection
MSDN-Library durchsuchenEnterCriticalSection
Delphi-Referenz durchsuchenTMultiReadExclusiveWriteSynchronizer
...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 3. Jan 2017 um 18:43 Uhr)
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Result als mehrdimensoiertes array im Thread

  Alt 3. Jan 2017, 19:50
Was sollte man da wohl drumrum machen?
Ja kommt noch im Original
Aber es geht erst mal um den Getter!

Gruß
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: Result als mehrdimensoiertes array im Thread

  Alt 4. Jan 2017, 09:24
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ß
Angehängte Dateien
Dateityp: pas LwThread.pas (4,9 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Result als mehrdimensoiertes array im Thread

  Alt 4. Jan 2017, 09:56
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:41 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