Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Form.Update funktioniert nicht in einem Thread ? (https://www.delphipraxis.net/112298-form-update-funktioniert-nicht-einem-thread.html)

Andy386 18. Apr 2008 10:09


Form.Update funktioniert nicht in einem Thread ?
 
Hallo,

ich habe einen kleinen nebenläufigen Thread erstellt, der mir immer ein Form aktualisieren soll.
Im Thread selber gibt es einen Pointer (_form), der auf das jeweilige zu aktualisierende Form zeigt (mittels init-Routine draufgezeigt).
im .Execute Steht
Delphi-Quellcode:
      _Form.Update;
      Sleep(10);
Der wird auch durchlaufen, nur leider ändert sich am Form nichts, ActiveX-Komponenten sind auch nicht drauf !

Ich habe Delphi 7 Professional

Luckie 18. Apr 2008 10:12

Re: Form.Update funktioniert nicht in einem Thread ?
 
Autsch. Direkte Zugriffe aus einem Thread auf VCL-Elemente sind nicht gut, da die VCL nicht threadsafe ist. Lies mal in der Hilfe, was da zu der Methode Synchronize von der Thread-Klasse steht.

hoika 18. Apr 2008 10:12

Re: Form.Update funktioniert nicht in einem Thread ?
 
Hallo,

Synchronize(Form.Update)

Und dann mal nen Breakpoint drauf. (in TForm).


Heiko

Andy386 18. Apr 2008 11:03

Re: Form.Update funktioniert nicht in einem Thread ?
 
Danke für den Tipp !

Aber es läuft leider noch nicht wie gewünscht: der Thread hängt am synchronize.
(Delphi hält aber auch nicht an meinem Breakpoint im classes.synchronize)


Also, mein Problem:
- Es wird auf eine Eingabe gewartet (mittels sysutils.sleep)
- Währenddessen soll man das Form bewegen, ziehen, schliessen,... können

Dani 18. Apr 2008 11:33

Re: Form.Update funktioniert nicht in einem Thread ?
 
Zitat:

Zitat von Andy386
Es wird auf eine Eingabe gewartet (mittels sysutils.sleep)

Warum startest du den Thread nicht erst dann, wenn eine Eingabe da ist?

rwachtel 18. Apr 2008 11:45

Re: Form.Update funktioniert nicht in einem Thread ?
 
Warum verwendest Du überhaupt einen Thread, um auf eine Eingabe zu warten?

Sherlock 18. Apr 2008 11:48

Re: Form.Update funktioniert nicht in einem Thread ?
 
Probiere doch mal das Ereignis OnChange Deines Edits....

Sherlock

Andy386 18. Apr 2008 12:28

Re: Form.Update funktioniert nicht in einem Thread ?
 
Nein, anders:
* der Thread soll nur das Form updaten, um auf Eingaben daruf zu registrieren (z.B. beenden)
* zur Zeit ist es so, dass wärhrend des sleep das Form nicht wiederkommt
* das soll mit dem Thread verhindert werden
* die Wartezeit liegt bei 1-5 Sekunden

Luckie 18. Apr 2008 12:33

Re: Form.Update funktioniert nicht in einem Thread ?
 
Zitat:

Zitat von Andy386
Aber es läuft leider noch nicht wie gewünscht: der Thread hängt am synchronize.

Logisch weil die Methode in Synchronzi im Kontext des Hauptthreads ausgeführt wird. Steht aber mit Sicherheit auch in der Delphi Hilfe.

bepe 18. Apr 2008 12:37

Re: Form.Update funktioniert nicht in einem Thread ?
 
Also wenn du schon mit einem Thread arbeitest würde ich eine Semaphore verwenden anstatt des Sleeps. Aber davon unabhängig wäre etwas Quelltext interessant um dir helfen zu können. Alles andere ist nur ein Rätselraten. Und wenn dir das mit dem Snychronize noch nicht bekannt war, dann solltest du dir noch etwas Hintergrundwissen aneignen...

shmia 18. Apr 2008 12:56

Re: Form.Update funktioniert nicht in einem Thread ?
 
Zitat:

Zitat von Andy386
ich habe einen kleinen nebenläufigen Thread erstellt, der mir immer ein Form aktualisieren soll.

Das ist Quark!
Der einzige, der das Formular aktualisieren (=neu zeichnen) darf ist das Formular selber.
Genauer gesagt, die Windows Message Schleife muss ständig laufen.
Ein Sleep legt diese Schleife für eine bestimmte Zeit still und kein Thread kann daran etwas ändern.
Du kannst eine Thread starten, der irgend eine Arbeit ausführt und seine Ergebnisse regelmässig an das Formular meldet (aber nur über die Synchronize Methode).
Aber du kannst keinen Thread erstellen, der ein Formular aktualisiert/neu zeichnet. :warn:

Andy386 18. Apr 2008 13:09

Re: Form.Update funktioniert nicht in einem Thread ?
 
@shima: Vielen Dank für die nützlichen Ausführungen, da weiss ich erstmal bescheid.

@bepe: Hintergrundwissen hab ich schon, das ist nicht das Problem. Nur von Delphi hab ich keine Ahnung.

rwachtel 18. Apr 2008 13:12

Re: Form.Update funktioniert nicht in einem Thread ?
 
@Andy386: Hilfreich wäre es natürlich mal im Detail zu erfahren, was überhaupt Dein Begehr ist - vielleicht (ich wette drauf :mrgreen:) gibt es sinnvollere Lösungswege...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz