Wenn mein Programm nicht richtig abreißt, wird das System instabil. Es gibt eigentlich keine Abhilfe. Wenn also mein Programm abstürzt und nicht korrekt heruntergefahren wird, muss ich dem Benutzer mitteilen, dass das System in einem instabilen Zustand zurückgelassen wurde, wenn er versucht, es erneut zu starten. Ist es der richtige Weg, dies zu tun, indem ich beim Start eine Sperrdatei anlege und sie lösche, wenn ich das Programm korrekt beende? Wenn ich starte und diese Datei existiert, dann weiß ich, dass ich vorher abgestürzt bin. Ist dies der richtige Ansatz?
Antworten
Zu viele Anzeigen?Zwei Dinge, die nützlich sein könnten:
- El API für Anwendungswiederherstellung und Neustart kann unter Vista und Win7 verwendet werden. Sie können eine Wiederherstellungsfunktion angeben, die das Betriebssystem für Sie aufruft, damit der Benutzer benachrichtigt wird
- Erstellen einer Filter für unbehandelte Ausnahmen wo Sie versuchen können, einige der wirklich kritischen Wiederherstellungen vorzunehmen, falls Sie anderswo einen Absturz erleben. Das funktioniert auch unter XP. Ich habe diese Technik bereits verwendet, um Treiber zu schließen, die sonst hängen bleiben würden, wenn sie nicht ordnungsgemäß geschlossen werden.
Wenn Ihr Programm abstürzt und der Rechner neu gebootet wird, ist dann immer noch ein instabiler Zustand vorhanden? Wenn nicht, dann ist eine Sperrdatei nicht der richtige Weg, da die Datei auch nach dem Neustart noch existiert. Versuchen Sie eine Lösung mit der globale Atomtabelle .
// Test if the application has crashed since the last reboot
ATOM myAtom = GlobalFindAtom ("MySecretName");
if (myAtom != 0)
{
// We crashed on last run, inform user and exit
// ...
exit (0);
}
// Create a global atom which will be destroyed only on clean termination
myAtom = GlobalAddAtom ("MySecretName");
// Run your main program here
// ...
// Clean termination, delete the atom
GlobalDeleteAtom (myAtom);
Nur damit Sie es berücksichtigen, aber die Sperrdatei kann unter Umständen nicht gelöscht werden, wenn die Umstände unabhängig von Ihrer Anwendung sind, z. B. bei einem Netzwerkfehler, einem Dateisystemfehler oder einem Fehler im Betriebssystem.
Wenn Sie also unbedingt wissen wollen, ob der aktuelle Zustand gültig ist, müssen Sie die Gültigkeit wahrscheinlich durch Prüfung aller abhängigen Variablen und Zustände ermitteln, anstatt sich nur auf die Sperrdatei zu verlassen. Ansonsten kann dies eine einfache Möglichkeit sein, den Exit-Status zu überwachen. Verlassen Sie sich nur nicht darauf, um zu bestimmen, ob Sie die Raketen neu starten sollten oder nicht.
Microsoft Word (auch PPT/Excel) verfolgt einen ähnlichen Ansatz. Eine versteckte Datei wird erstellt, wenn ein Dokument im Schreibmodus geöffnet wird, und sobald die Anwendung normal beendet wird, wird sie gelöscht. Die Datei kann viele weitere Informationen enthalten, wie z. B. das automatische Speichern des Dokuments alle x Minuten usw., aber der Punkt ist, dass Ihr Punkt gültig ist :-)