Frage

ich überlastete die 6-Signale auf dieser Seite http: // www. cplusplus.com/reference/clibrary/csignal/signal.html

Dann lief ich meine app (Doppelklick nicht durch IDE lief) und versucht 1) Ende Task 2) X auf topright und 3) töten Prozess. Ich erwartet, dass die ersten beiden eine Art von Signal zu verursachen (ich bin auf XP), aber leider bekam ich nichts. Bin ich nicht erlaubt Dateien zu öffnen, schreiben in, wenn ein Signal auftritt? Ich schätze, ich bin (SIGSEGV mir erlaubt).

Wenn Firefox abstürzt oder wenn ich es töten, es erinnert, welche Seiten ich war. Ist es die Adresse jedes Mal einloggen ich eine Seite klicken oder ist es, dass auf einem Signal / crash tun?

meine Hauptfrage ist, welches Signal kann ich Kill Prozess zu fangen verwenden

War es hilfreich?

Lösung

Win32 bietet keine Möglichkeit, Ihr Programm abfangen mit TerminateProcess getötet zu werden (das, was passieren wird, wenn Sie „Task beenden“ von Task-Manager oder klicken Sie auf das [X]).

Sie können das SIGSEGV Signal fangen, weil die C-Laufzeitbibliothek eine Emulation dieses Signals bereitstellt, wenn unter Windows ausgeführt wird. Wenn Ihr Programm führt zu einer Windows-Zugriffsverletzung (Ausnahme 0xC0000005), hat die Laufzeitbibliothek die Möglichkeit, dass zu fangen und einen Unix-Stil SIGSEGV für Sie zu simulieren. Dies ist jedoch nicht der beste Weg, eine solche Ausnahme zu behandeln. Wenn Sie ein Win32-Programm schreiben, sollten Sie im Allgemeinen nicht versuchen Unix Stil Dienste zu nutzen.

Andere Tipps

Sie können Laufzeitfehler wie eine Zugriffsverletzung fangen, wenn Sie den Standard-Exception-Handler-Aufruf SetUnhandledExceptionFilter außer Kraft setzen (dies ist eine Win32-Funktion und als solche beruhen nicht auf C-Library-Emulation). Dies ist das Verfahren bereitzustellen, verwendet wird, kann „minidumps“, wenn ein Programm abstürzt.

Aber diese Exception-Handler nicht aufgerufen werden, wenn Sie in der Regel Ihre Anwendung schließen, oder wenn Ihre Anwendung von Task-Manager geschlossen. In den letzten Fall Fenstern ruft TerminateProcess, ist kein sauberes Herunterfahren aber es zwingt das Programm zu beenden.

ich von denen nicht bewusst bin, ist die Implementierung von Firefox verwendet, aber die aktuell Tabs speichern geöffnet wahrscheinlich einen Timer am Laufen haben ist, und jedes Mal, wenn es ausgeführt wird, um die Geschichte in eine Datei und eine Art von schmutzigen sparen Marke.

Andere komplexere Lösungen zu erkennen, wenn ein Programm geschlossen ist (implementiert durch Anti-Virus und ähnliche Programme) ist zwei unabhängige Programme laufen zu lassen, die jeweils prüfen, ob der andere noch läuft, und wenn man die anderen erkennen, wurde der Ablauf geschlossen wieder.

Windows-Anwendungen sind entweder Konsolenanwendungen oder GUI-Anwendungen. Konsolenanwendungen neigen WM_CLOSE zu bekommen, Konsole apps CTRL_CLOSE_EVENT. Weder sind Signale; weder gesendet werden würde, wenn Ihre App über TerminateProcess beendet ().

Wenn Sie speichern möchten, wo Sie waren, verwenden Sie eine Memory-Mapped-Datei und aktualisieren, die auf jede Aktion. Wenn Ihr Prozess beendet wird, wird die schmutzige Seite im Speicher zurückgeschrieben durch das Betriebssystem der Datei, möglicherweise in anderen Momenten zu. Diese Lösung ermöglicht die OS Disk-I / O für Sie zu verwalten, und es ist in einer besseren Position, dies zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top