Thread ? warum wird zweimal eine Procedure aufgerufen ?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

theo hat geschrieben:Wieso machst du das überhaupt in einem extra Thread?
Ein Application.Processmessages in
while P.Running do
würde es vielleicht auch tun. Oder hab ich da was nicht verstanden?
Das war mein Hinweis.
Und ich bleib dabei, da gehört theoretisch nen Thread rein, weil der sich dabei denk ich lonht und wesentlich eleganter ist, als ProcessMessage, schon, weil man so weiter parallel arbeiten kann.
Und wennn, denk ich, sollte der gleich rei und nicht erst irgendwann nachträglich.

Und was das problem angeht - Pluto, beis dich mal durch, und mach jetzt nicht alles wieder anders, nur weil das eine nicht geht.

Du hast das Beispiel, und da ruft sich nichts mehrfach auf. Vergleich halt mal mein Beispiel, für was ich fast meine Hand ins Feuer leg, mit deinem Code.
Das einzige, was mir dazu einfällt, wäre, dass du in der mit Synchronized aufgerufenen Procedure Procedure direkt deine Ausgabe hast.

Code: Alles auswählen

procedure TBackupThread.Progress;
begin
  Form1.Memo1.Lines.Add(Status);
end;
Die würde nämlich wirklich mehrfach aufgerufen, aber sonst wäre eine Fortschrittsmelung ja auch sinnlos.

//Schnuller ist mir dazwischen gekommen, der Originalcode bzw. so leicht modifiziert wie im Beispiel läuft wunderbar und das unter Linux und Windows, daran kann es eigentlich nicht liegen, bzw. Pluto hat das falsche verändert ;)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

also mein code stammt jetzt aus der Wiki.

und der Vorschlag von Schnluuer bringt leider kein anders Ergbnis.

Ich bin mir sicher es liegt an der Daten menge im speicher. Weil bei allen anderen Formaten geht das ja wie z.b. bei Zip, kein Problem nur bei deine 7z Archiv geht es nicht. Ob nun Thread oder nicht, spielt hier im Moment weniger die Rolle. Ich werde es aufjedenfall auslagern in einem Thread sobald es Geht.

Egal was ich mache: Die Procedure run7za wird immer zwei mal auf gerufen. Bei deinem Archiv. Und das muss etwas mit Pointern zu tuen haben.
Nehme ich den Code rauß, wird die Procedure nur einmal ausgefüht wie es sich auch gehört.
Sobald ich den Code(also die schleifen) wieder rein nehme wird sie zweimal auf gerufen.

wobei es keine rolle spiel welche schleife ich aktivere die erste oder die zweite.
Die Daten menge bleibt die gleiche und auch der Fehler.

Ich habe schon gesucht, ob es Probleme mit Pointern geben könnte aber bis jetzt leider nichts gefunden.

Ich hoffe einer von euch kann mir noch weiter Helfen.
Sonst hätte ich nur noch die Idee, diesen Problem in anderen Foren zu schildern.
Bzw. hier hier zu verlinken und Fertig.

Ich weiß wirklich nicht mehr weiter, so gut kenne ich mich mit Pointern und Hardware auch wieder nicht aus.
und wie gesagt es spielt keine Rolle ob der Code in einen Thread oder direkt ausgefürht wird: der Fehler ist der gleiche. Evlt. liegt es ja nur am Format und an 7za irgendwie.
MFG
Michael Springwald

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Ich seh keinen Grund, das es ausgerechnet an diesem 7z-Archiv leigen soll. Bau es so mit Thread ein, und wenn du die nächste Version hast, könnend as andere dann auch mal Testen, und der fehler wird sich finden lassen und bis dahin vergiss erstmal mein Archiv ;)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

gut, dann mache ich es erstmal so und hoffe das ihr den Fehler dann irgendwan findet.
ich glaube auch nicht das es an deinem Archiv liegt. Es liegt an der Daten menge.
Das werde ich noch mal testen. Gleich.

so ich habe unter
http://www.lazarusforum.de/viewtopic.php?p=7386#7386" onclick="window.open(this.href);return false;
einen neue Version hoch geladen.Aber ohne den Thread zu verwenden.
evlt. sollte ich mir mal Version Nummern für das Archiv überlgen *G*
MFG
Michael Springwald

Antworten