Signalhandler Schließen Button



  • Hallo,

    ich programmiere zurzeit eine Konsolenapplikation die dynamisch Speicher alloziert und wenn Sie ordnungsgemäß beendet wird, diese auch wieder freigibt.
    Wenn man jedoch auf den Close Button oben rechts klickt wird das PGR beendet ohne dass der Speicher wieder freigegeben wird.
    Ich möchte gerne dieses Signal, welches dem Prozess geschickt wird, vorher abfangen, die allozierten Resourcen freigeben und dann beenden.

    Ich muss wahrscheinlich einen Signal Handler implementieren. Wie mache ich das? oder ist dieses Signal nicht abfangbar ?

    P.S Ist meine Frage nicht im passenden Forum bitte ich um Verschiebung in das jeweilige Forum. Wird meine Frage jedoch gelöscht, werde ich sie erneut posten, solange bis meine IP-Adresse gebannt wird. Dann werde ich eine neue IP-Adresse beziehen und die Frage nochmal stellen. Ich habe die Frage in einer Textdatei gespeichert.

    VG



  • Geralt von Riva schrieb:

    Ich muss wahrscheinlich einen Signal Handler implementieren. Wie mache ich das? oder ist dieses Signal nicht abfangbar ?

    ...bis hierhin war ich noch bereit, dir zu helfen ...

    Geralt von Riva schrieb:

    Wird meine Frage jedoch gelöscht, werde ich sie erneut posten, solange bis meine IP-Adresse gebannt wird. Dann werde ich eine neue IP-Adresse beziehen und die Frage nochmal stellen. Ich habe die Frage in einer Textdatei gespeichert.

    Ab hier nicht mehr.

    Ich hoffe, die Moderation bannt gleich deinen ganzen Netzblock. Dann kannst du dir versuchen, so oft eine IP aus deinem Providernetz zu holen, wie du lustig bist, das wird dir nix bringen. Geh weg.



  • Dann komme ich über Proxy wenn mein Netzblock gesperrt wird. Ausserdem werden auch andere aus diesem Netzblock gesperrt. Kolleteralschaden nennt sich das.



  • Mach bitte die Tür zu. Von draussen.



  • Habe nun selber die Lösung rausgefunden und möchte Sie mit der Community teilen.

    Zunächst wird der Signalhandler implementiert. Also die Funktion die aufgerufen werden soll, wenn das Signal empfangen wird. (SIGBREAK)

    void sigfunc(int sig) {
    	printf("Signal zum Fenster schließen empfangen. Signalnr : %i\n", sig);
    	free_all_allocated_ressources();
    }
    

    und in der Main Funktion

    signal(SIGBREAK, sigfunc);
    

    zusätzlich sollte noch das Signal SIGINT abgefangen werden. SIGKILL kann leider nicht abgefangen werden. Es gibt noch eine andere bessere Möglichkeit Signale abzufangen. Leider ist diese Methode betriebssystemabhängig, daher bevorzuge ich diese Lösung.

    VG



  • Reicht atexit() nicht?



  • @DirkB

    Doch es reicht vollkommen aus, nur kannte ich diese Funktion bis jetzt noch nicht. Vielen Dank für die hilfreiche Antwort.


Anmelden zum Antworten