AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Was kommt zwischen QueryEndSession und EndSession?
Thema durchsuchen
Ansicht
Themen-Optionen

Was kommt zwischen QueryEndSession und EndSession?

Ein Thema von Angel4585 · begonnen am 10. Sep 2010 · letzter Beitrag vom 24. Sep 2010
Antwort Antwort
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#1

Was kommt zwischen QueryEndSession und EndSession?

  Alt 10. Sep 2010, 09:48
Guten Morgen.

Ich hab ein kleines Programm, welches eine TCP-Verbindung mit nem lokalen Dienst herstellt um mit diesem Dienst zu kommunizieren.
Nun hängt sich das Programm blöderweise ständig beim herunterfahren auf, was natürllich nicht sein soll, da es dadurch den Shutdown blockiert, der automatisch nachts nach einer Sicherung stattfinden soll.

Im Programm selbst verwende ich QueryEndSession und QuerySession, da das Programm auf Befehl den Shutdown blockieren soll.
Dieser Befehl kommt momentan nie, also kann man das eigentlich ignorieren.
Allerdings habe ich festgestellt, dass QueryEndSession erfolgreich abgearbeitet, EndSession in manchen Fällen jedoch nie erreicht wird.

Stellt sich mir die Frage: Was kommt zwischen QueryEndSession und EndSession?
Wo muss ich nach dem Fehler suchen?

Ich verwende Indy TCP Komponenten, Threads, Timer.

In der QueryEndSession-Methode mache ich nichts ausser abzufragen, ob blockiert werden soll oder nicht, sollte man da auch TCP-Verbindungen etc beenden?
Hab das bisher immer im finalization Abschnitt gemacht.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 14. Sep 2010, 10:32
Oha, keiner eine Idee?
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#3

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 09:49
QueryEndSession ist ja nur die Frage an die Anwendung, ob Einspruch gegen das Beenden erhoben wird.
Die Frage muss einfach beantwortet werden. Ob wirklich die Session beendet wird, hängt ja auch von den anderen Anwendungen ab. Deshalb sollte das Programm als Reaktion auf diese Nachricht keine weiteren Aktionen unternehmen.
Bei Endsession kann eigentlich das Beenden nicht mehr wirklich verhindert werden. Hier kann die Anwendung einfach nicht gespeicherte Daten bzw. den aktuellen Status z.B. in einer speziellen Sicherungsdatei speichern, so dass beim nächsten Programmstart die Arbeit an dieser Stelle fortgesetzt wird. Den Benutzer noch zu Fragen, ob er die Änderungen wirklich speichern will, ist eher ungünstig.
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#4

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 11:08
Zwischen QueryEndSession und EndSession vergehen ein paar Sekunden Bedenkzeit, bei dem auf die Rückgabewerte der QueryEndSession messages gewartet wird. Wie man das Herunterfahren abbricht, ist hier zu sehen (das sollte die Schwierigkeit nicht gewesen sein)
http://www.delphipraxis.net/972598-post8.html
vom feeling her würde ich einen Dialog mit countdown ala "Herunterfahren abbrechen (3..2..1..)" anzeigen lassen, falls noch wichtige Vorgänge laufen und ein user davorsitzt. Wenn die Zeit verstrichen ist, keine Interaktion erfolgt ist und noch etwas wichtiges am Laufen war, kann man einen Protokolleintrag erzeugen, unter welchen Umständen das Herunterfahren ausgeführt wurde.
Power is nothing without TControl

Geändert von hboy (24. Sep 2010 um 11:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 12:10
Ab Vista ist es allerdings so, dass das Betriebssystem keine Rücksicht mehr nimmt auf den Rückgabewert von QueryEndSession. Das Betriebssystem fährt auch runter, wenn man sagt, es soll nicht runterfahren. Die Entwickler haben sich gesagt, "der Benutzer will das System runterfahren, also fahren wir es auch runter".
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#6

AW: Was kommt zwischen QueryEndSession und EndSession?

  Alt 24. Sep 2010, 14:02
Danke für den Hinweis, das ist natürlich unschön. Kann man wenigstens mit "shutdown -a" noch etwas reißen oder sind die Shellbefehle ab QueryEndSession auch nicht mehr verfügbar?
Power is nothing without TControl
  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 04:18 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