![]() |
Problem nach 48 offenen Fenstern
Hallo,
Ich suche schon seit längerem ein Problem in unserer Anwendung. Es ist meinem Kollegen jetzt gelungen das Problem zu reproduzieren. Folgendes Programm hat er erstellt. Eine Anwendung die 48 Forms hat. Es gibt nur einen Eintrag in der Taskleiste. Dann hat er eine Button auf einem Formular, dieser löst eine Endlosschleife aus. Auf einmal werden in der Taskleiste 2 Programme angezeigt. Dies ist nur unter Windows Server 2003 und nicht unter XP zu reproduzieren. Hat jemand schon einmal von diesem Problem gehört? Ich weis auch nicht wie wir den Ursprung des Problems finden können. Bitte schickt mir ein paar anregungen. SC vom testprogramm kann ich noch zur verfügung stellen. |
AW: Problem nach 48 offenen Fenstern
Ich kann soweit nicht weiterhelfen...
wenn aber ein Programm > = 48 Fenster nutzt würde ich es von von der Platte löschen denn so richtig übersichtlich kann das nicht werden. Wäre es nicht besser auf Frames oder Pages auszuweichen ? |
AW: Problem nach 48 offenen Fenstern
Dito @ turboPASCAL.
Und wenn ein Prog in einer Endlosschleife hängt, ist es doch eh egal, was dann für weitere Effekte auftreten. Man muss es dann ja eh abschießen, da der Hauptfehler - das Aufhängen - ja schon passiert ist. |
AW: Problem nach 48 offenen Fenstern
Bei "älteren" Delphis lag Application in der Startleiste, wärend bei neueren Delphis standardmäßig die Hauptform dort angezeigt wird.
(wurde mit Windows Vista/7 notwendig ... vorallem für die Vorschaufunktion dort) Wenn nun die Anwendung hängt, kann es passieren, daß aus irgendwelchen Gründen beide Forms angezeigt werden. (Application besitzt eine "versteckte" Form für Steuerungszwecke) Abgesehn davon sollte eine Anwendung eh nicht "lange" hängen bleiben ... ist für den Benutzer nicht so schön. |
AW: Problem nach 48 offenen Fenstern
Der Punkt ist: Wenn das Programm nicht mehr reagiert, übernimmt Windows die Kontrolle um zu retten was zu retten ist. Wenn Windows erkennt, dass da ein Taskleisteneintrag fehlen könnte, wird der hinzugefügt. Genauso versucht Windows ab Vista den Fensterinhalt dennoch weiter anzuzeigen und nur mit einem weißen Schleier anzuzeigen, dass das Fenster nicht mehr reagiert.
Dieses Verhalten tritt im normalen Betrieb aber nicht auf. Wenn das Programm nicht mehr reagiert, ist irgendetwas schief gegangen. Und dann hat man ganz andere Probleme als mehrfache Taskleisteneinträge... |
AW: Problem nach 48 offenen Fenstern
Fassen wir zusammen: Ein Programm mit 1 (oder 2) Fenstern hängt und neuere Windows-Versionen produzieren manchmal 2 Fenster in der Titelleiste, aus welchen Gründen auch immer.
Da der Fragesteller nicht gefragt hat, ob 48 Formulare der Weisheit letzter Schluss sind, frage ich mich, wieso das dann kritisiert wird. Er dachte vermutlich, das die hohe Anzahl etwas mit der Taskleisteneintragverdoppelungsproblematik zu tun hat. |
AW: Problem nach 48 offenen Fenstern
Erstmal vielen,vielen Dank für die Antworten.
Mein Beispiel ist natürlich nicht sinnvoll. Es sollte nur dazu dienen den Fehler nachzustellen. Wir haben in unserer Anwendung einige 100 Formulare. Es passiert ab und zu, das in einem aktiven Formular eine Funktion ausgeführt wird, die ein paar Sekunden zu abarbeiten braucht. Dabei entsteht manchmal dieser Effekt, das es einen 2 Taskleisteneintrag gibt. Wird dieser Taskeintrag vom Benutzer aktiviert,so entstehen ganz neue Probleme z.B. im Rest des Programms wird dann kein Onclick - Event mehr abgearbeitet, usw. Man muss das Programm dann abschießen. Mein Kollege hat dann diese Testapplikation in Delphi 7 gebaut und in diesem Programm passiert es immer erst ab 48 Formularen und nur auf Windows 2003 server. Auf Frames oder Pages kann aufgrund unserer Basisstruktur nicht ausgewichen werden. Das ganze wird unter Delphi 7 entwickelt. |
AW: Problem nach 48 offenen Fenstern
Sind die Fenster immer schon erzeugt und nur nicht sichtbar? -> Erzeugung der Formulare erst wenn sie benötigt werden und freigabe wenn Sie nicht mehr benötigt werden, ansonsten belegen sie schon unnötigerweise GDI-Ressourcen.
Langandauernde Aktionen sollten wenn möglich in Thread verlagert werden. Falls das zu aufwending ist sollte regelmäßig die Message-Schleife des Programms bedient werden. Am einfachsten durch ein Application.ProcessMessage. Man sollte aber dafür sorgen das der User dann nicht versehentlich einen Button drückt und dann eine "parallele" Verarbeitung startet. |
AW: Problem nach 48 offenen Fenstern
Zitat:
hab aber noch keine gesehen die soviele Fensterbenötigt:wink: selbst bei grossen DB nicht. Darum mal zur Aufklärung. 1. sind den alle >48 Fenster zur gleichen Zeit sichtbar? (solls ja auch geben:shock:) 2. habt ihr euch schon mal die CPUlast und resourcen angschaut, nach dem ihr die >48 Fenster aktiviert bzw evtl wieder geschlossen habt? 3. Server2003 verwaltet die resourcen anders als XP und Vista/7 (je nach configuration) 4. für was benötitg man ein Fenster Zitat:
Selbst wenn man sagt, ich muss da Daten eingeben die dann berechnet werden, weil sie wo anders benötigt werden usw.... Ich befürchte.... Hier ist konzeptionell etwas schief gegangen @hoschiepeter: Du schreibst, Zitat:
Es ist einfach mal 100Formulare zu machen, nur weil man ein paar unterschiedlich Eingaben benötigt, die man evtl auch mit 3-10 machen kann. Gruss alfold |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:57 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 by Thomas Breitkreuz