AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Form.Resize während einem Synchronize / Thread-Handling
Thema durchsuchen
Ansicht
Themen-Optionen

Form.Resize während einem Synchronize / Thread-Handling

Offene Frage von "himitsu"
Ein Thema von swestner · begonnen am 30. Aug 2022 · letzter Beitrag vom 30. Aug 2022
Antwort Antwort
swestner

Registriert seit: 31. Aug 2012
Ort: Hallstadt
74 Beiträge
 
Delphi 10.4 Sydney
 
#1

Form.Resize während einem Synchronize / Thread-Handling

  Alt 30. Aug 2022, 00:31
Hallo,

ich habe ein etwas kniffeliges Problem und vielleicht hat jemand eine Idee, wie das zu lösen ist.

Plattfrom: Delphi 11.1, Firemonkey unter Windows

Programm startet und zeigt ein Form an.
Jetzt startet ein Thread, dieser berechnet aus einer Menge Daten ein Grafik.
Wenn der Thread die Grafik fertig gerechnet hat, ruft er einen Callback auf.
In diesem Callback mache ich ein Synchronize und rendere damit dann im Hauptthread die berechnete Grafik auf's Form.

Das funktioniert soweit.

Allerdings kann der Benutzer das Hauptform auch vergrößern.

Wenn das Form z. B. 600 Pixel breit und 400 Pixel hoch ist dann wird die Grafik auf diese Größe ins Form gerendert.

Jetzt zieht der Benutzer das Form größer, dann stoppe ich den Hintergrundthread (eine laufende Berechnung ist ja jetzt hinfällig) und starte den mit den neuen Form-Größen neu.

Jetzt kommt das Problem:
Der Thread ist fertig mit rendern und ruft den Callback auf.
Im Callback rufe ich Synchronize auf und zeichne die Grafik auf's Form.
Genau in dem Moment des Zeichnens zieht der Benutzer aber das Form größer.
Im Resize versuche ich jetzt den Hintergrundthread zu stoppen, was aber nicht klappt, da der ja im Callback im Synchronize die Grafik neu zeichnet.

Wie löst man sowas?
Und warum kann ich überhaupt das Form resizen wenn die Applikation durch das Abarbeiten des Callbacks eigentlich gar nicht im On-Idle ist?

Grüße

Stefan
Stefan Westner
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Form.Resize während einem Synchronize / Thread-Handling

  Alt 30. Aug 2022, 01:39
Eine der beiden Seiten muß asynchron arbeiten.

entweder der Thread nutzt kein Synchronize oder das Abbrechen/Beenden wird nicht blockierend gemacht.

am Einfachsten:
* der Thread gibt sich selbst frei (FreeOnTerminate)
* das Stoppen wird nur signalisiert (nicht gewartet) ... z.B. Thread.Terminate
* der neue Thread kann schon gesartet werden, während der Alte sich noch in Ruhe beenden kann

oder
* wenn der noch laufende Thread auf das "Neuberechnen"-Signal reagiert (nach dem Synchronize) und z.B. in einer Schleife (oder Goto) wieder hoch springt und die Berechnung neu startet, dann braucht es keinen neuen Thread
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Aug 2022 um 01:42 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:57 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