Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Neu Zeichnen im Thread? (https://www.delphipraxis.net/7993-neu-zeichnen-im-thread.html)

bort 26. Aug 2003 13:39


Neu Zeichnen im Thread?
 
Ein altbekanntes Problem, wofür ich immernoch eine Lösung suche:

Eine Funktion (nicht thread-sicher! "Application.ProcessMessages" nicht einbaubar!) braucht sehr lange, das Formular wird lange Zeit nicht aktualisiert.
Wie kann man die Anwendung zwingen sich zwischendurch trotzdem neu zu zeichnen?

Meine erste Idee war das "Paint" oder ProcessMessages aus einem Thread aufzurufen der nebei läuft und nur das Formular neu Zeichnen sollte - aber so einfach funktioniert es natürlich nicht. Mußte ich allerdings erst praktisch testen... :?

Ich komme da nicht weiter, hat jemand von euch noch eine kreative Idee die funktioniert?

Gruß

Sven

neolithos 26. Aug 2003 13:53

Re: Neu Zeichnen im Thread?
 
Ruf doch die Windows-Funktion InvalidateRect

Die schickt dann schon die Nachrichten an dein Fenster.

bort 26. Aug 2003 14:33

Re: Neu Zeichnen im Thread?
 
Zitat:

Zitat von neolithos
Ruf doch die Windows-Funktion InvalidateRect

Die schickt dann schon die Nachrichten an dein Fenster.

Hm, ich denke genau das ist ja das Problem: Die Anwendung verabeitet keine Messages bis die Funktion fertig ist. Darum wird auch zwischendurch nichts neu gezeichnet, egal wie viele update Aufforderungen in der Warteschlange sind.

Korrigiert mich, falls ich etwas falsch verstanden habe.

Trotzdem, danke für die Anregung!

Luckie 26. Aug 2003 14:42

Re: Neu Zeichnen im Thread?
 
Dann lager die Funktion dochin einen Thread aus. Oder was spricht dagegen?

Und was heißt, dass die Funktion nicht thread-sicher ist? So lange du sie nur einmal in einem separaten Thread aufrufst und nicht in mehreren Threads parallel aufrufst, sollte es keine Probleme geben. Letzt endlich mach es keinen Unterschied, ob die Funktzion einml im primär Thread auf gerufen wird oder einmal in einem sekundären Thread. Problematisch wird es erst, wenn du eien nicht thread-sichere Funktion in mehrern sekundär Threads gleichzeitig aufrufst.

neolithos 26. Aug 2003 14:48

Re: Neu Zeichnen im Thread?
 
Also ich hab das so verstanden:

Du hast einen Thread.
In diesen Thread wird etwas gemacht.
Du hast ein Formular in dem etwas dargestellt wird, was von den Werten die in diesem Thread beeinflusst werden abhängt.

Wenn was nicht stimmt korrigiere mich.

Daher Funktioniert InvalidateRect - ich mach's ja selbst so.

bort 26. Aug 2003 16:02

Re: Neu Zeichnen im Thread?
 
@neolithos
Ne, leider gibt's keinen thread in dem was gemacht wird. Alles läuft in der Hauptanwendung (ist halt so gewachsen, nicht von mir und so weiter...)


Zitat:

Zitat von Luckie
Dann lager die Funktion dochin einen Thread aus. Oder was spricht dagegen?

Oh, da hatte ich wohl ein anderes Verständnis von dem was Thread-Sicher ist ... ich werde es jetzt einfach mal testen (die besagte Funktion ist mit Datenbank-Abfragen und so'n Zeugs. Daher erwarte ich eigentlich komische Seiteneffekte wenn das im thread läuft .. aber mal sehen....)

Werde über Erfolg/Misserfolg berichten ....

bort 27. Aug 2003 10:23

Re: Neu Zeichnen im Thread?
 
Hier das Ergebnis meiner Tests: Es funtkioniert teilweise.

Ein großteil Teil der besagten Funktionen laufen auch im Thread problemos. Danke für den Hinweis!
Natürlich gibt's aber auch etwas was (momentan) nicht im Thread funktioniert: Der Druck mit der Crystal-Report-Komponente.

Falls jemand Thread-Erfahrung damit hat, bitte melden! Dann könnte ich mir weitere Versuche sparen :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:15 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