AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Aktualisierung Fenster erzwingen

Ein Thema von Surrounder · begonnen am 28. Jul 2005 · letzter Beitrag vom 28. Jul 2005
Antwort Antwort
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#1

Aktualisierung Fenster erzwingen

  Alt 28. Jul 2005, 10:26
Hallo Forum,

hab ein kleines Problem bei meiner Software. Folgendes zur Software, es gibt ein Hauptforumlar, alle anderen Formulare werden zur Laufzeit erzeugt und auch wieder zerstört. Ich hab im Hauptformular eine Outlookleiste mit entsprechenden Buttons die dann die Formulare erzeugt und beim umschalten auch wieder löscht. Außerdem hat jedes Formular eine Aktualisierungsroutine die bei jedem Formular die gleichen Übergabe und Rückgabeparameter hat. Das Hauptformular hat einen Timer, und dieser Timer sprint über einen Zeiger diese Aaktualisierungsroutine an ( alle 100 ms ), je nachdem welches Fenster denn gerade aktive ist. So weit tut das auch alles.

Jetzt hab ich nur das Problem, dass es beim Umschalten ab und zu, zu einer Exception kommt.

Und zwar besonders dann wenn ich viel auf dem Formular zu tun habe / hatte. Jetzt hab ich mit einigen Zusatzunits und Mapfile herausbekommen, dass es damit zu tun haben muss dass Windows nachdem das Formular weg ist noch auf irgend etwas zugreifen will um es zu aktualisieren.

Meine Frage jetzt, kann das sein? Kann es sein dass es erschwert zu tage kommt weil ich über einen Zeiger auf die Aktualisierung des Formulares mache?

Wenn ich jetzt in die Close Routine des Formulars einen Application.ProcessMessages setzte, zwinge ich dann Windows wirklich dazu alle Dinge die es noch auf dem Formular tun muss auch sofort zu tun?

Oder gibt es eine bessere Möglichkeit nur das eine Fenster zu aktualisieren?
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#2

Re: Aktualisierung Fenster erzwingen

  Alt 28. Jul 2005, 10:30
frmBlah.Invalidate;


- btw, wieso lässt du über nen timer deine ganzen fenster alle 100ms "aktualisieren"
- wird der aktualisierungstimer vor dem zerstören des fensters auch angehalten/zerstört?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Aktualisierung Fenster erzwingen

  Alt 28. Jul 2005, 10:35
Manchmal ist es besser TForm.Release() zu verwenden an Stelle von TForm.Free(), aber in der Regel tritt der Fehler auf, wenn an irgendeiner Stelle nach dem Free() ein dangling pointer zurück bleibt.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Aktualisierung Fenster erzwingen

  Alt 28. Jul 2005, 10:40
Weil die Daten die in den Fenstern stehen über eine USB Kommunikation von einer Hardware kommen, für die Menge an Daten brauche ich eine schnelle Kommunikation. Und um diese Daten jetzt im Fenster darzustellen habe ich eben einen Zeiger den ich prüfe ob er nil ist oder nicht, wenn nicht dann rein in die Routine und aktualisieren. Das sind ca. 30 verschiednen Fenster, aber immer nur das aktive muss aktualisiert werden.

Der Timer kommt alle 10ms und jeden 10 durchlauf aktualisiert er das aktive Fenster ( Eigener Timer, der Windows Timer schafft das nicht ). Vor dem aktualisieren des Fenster setze ich eine globale Variable, und wenn ich zurück komme lösche ich diese. Wenn der close des Fensters kommt, weil z.B umgeschaltet wurde, dann warte ich im close bis die globale Variable False ist und dann setzte ich den Zeiger auf nil, so dass der Timer nicht noch einmal in das Fenster springen kann.

Ich hab eigentlich gedacht dass das reichen müsste um zu verhindern dass der Timer nach 10 durchläufen erneut ins Fenster springt. Weil ich den Timer aufgrund der Kommunikation die ja weiter laufen muss nicht anhalte.
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Aktualisierung Fenster erzwingen

  Alt 28. Jul 2005, 10:51
Zitat von marabu:
Manchmal ist es besser TForm.Release() zu verwenden an Stelle von TForm.Free(), aber in der Regel tritt der Fehler auf, wenn an irgendeiner Stelle nach dem Free() ein dangling pointer zurück bleibt.

Grüße vom marabu
Blöde Frage vielleicht jetzt, aber welche Möglichkeit habe ich so einen Pointer los zu werden bzw. zu verhindern? Ich mein ich habe TCharts auf dem Formular und einige StringGrids. Soll ich die alle von Hand am Ende mit Free freigeben?
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Aktualisierung Fenster erzwingen

  Alt 28. Jul 2005, 11:04
Zitat von Surrounder:
Blöde Frage vielleicht jetzt, aber welche Möglichkeit habe ich so einen Pointer los zu werden bzw. zu verhindern?
Verwende FreeAndNil() anstelle von .Free
Julian J. Pracht
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Aktualisierung Fenster erzwingen

  Alt 28. Jul 2005, 11:25
Ein dangling pointer entsteht, wenn du beipielsweise in Form2.OnCreate eine Methode von Form2 an Application.OnIdle zuweist, dann irgendwann Form2.Free ausführst ohne vorher Application.OnIdle auf nil zu setzen. Nach der Wiederbelegung des Hauptspeichers führt das zu einer exception.

Das Beispiel ist vielleicht nicht sehr realistisch, aber es sollte dir verdeutlichen, dass nur deine Sorgfalt dich vor einem dangling pointer schützen kann.

marabu
  Mit Zitat antworten Zitat
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 21:36 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