title image


Smiley Re: Abbruch durch Fremdeinwirkung bei KonsolenApp abfangen
SO ich gebe dir mal 2 Möglichkeite wie Du Ctrl+C abfangen kannst. Beide funktionieren und wurden von mir schon eingesetzt!



-------CODE1 BEGIN------------



#include

#include



using namespace std;



BOOL CtrlHandler (DWORD fdwCtrlType)

{

switch(fdwCtrlType)

{

case CTRL_C_EVENT:

{

cout << "Ctrl-C event" << endl << endl;

Beep(750,300);

return TRUE;

break;

}

case CTRL_CLOSE_EVENT:

{

cout << "Ctrl-Close event" << endl << endl;

Beep(600,200);

return TRUE;

break;

}

case CTRL_BREAK_EVENT:

{

cout << "Ctrl-Break event" << endl << endl;

Beep(900,200);

return FALSE;

break;

}

case CTRL_LOGOFF_EVENT:

{

cout << "Ctrl-Logoff event" << endl << endl;

Beep(1000,200);

return FALSE;

break;

}

case CTRL_SHUTDOWN_EVENT:

{

cout << "Ctrl-Shutdown event" << endl << endl;

Beep(750,500);

return FALSE;

break;

}

default:

return FALSE;

break;

}

}



int main()

{

if(SetConsoleCtrlHandler ((PHANDLER_ROUTINE) CtrlHandler, TRUE))

{

cout << endl << "The Control Handler is installed." << endl

<< endl << " -- Now try pressing Ctrl+C or Ctrl+Break, or"

<< endl << "try loggin off or closing the console..." <
<< endl << "(...waiting in a loop for events..." <
<< endl;



while (1){}

}

else

{

cout << endl << "Error: Could not set control handler" << endl;

}

return 0;

}

-------CODE1 END------------

Diesen Code habe ich ebenfalls hier im Forum irgendwann mal bekommen und ich danke an dieser Stelle denjenigen der das gepostet hat (leider weiß ich den Namen nicht mehr SORRY)

Bei dieser Version hast Du den Vorteil, dass bei einem Ctrl+C Event das Programm nicht beendet wird und Du einfach weitermachen kannst! Du kannst aber auch jeden beliebigen EXIT Code ausführen oder was du sonst noch machen willst!



-------CODE2 BEGIN------------

#include

#include



using namespace std;



void interrupt(int sig)

{

//close serial port

closser();

//disconnect from database

if(ocio==1){

dbs->DisconnectOCI();

}

//clear global variables

clearglobal();

//documentation of abort in a log.file

outfile.open ("error.log", ofstream::out| ofstream::app);

outfile <
outfile.flush ();

outfile.close();

}



int main()

{

..........

signal (SIGINT,interrupt); //Ctrl+C

..........

return 0;

}

-------CODE2 END------------

Hier wird das Programm beendet nachdem die Funktion im interrupt ausgeführt wurde.

Wie Du sehen kannst schreibe ich auch in ein Logfile bevor das Programm beendet wird und führe auch noch andere Funktionen aus. Auch hier kannst Du deinen EXIT Code ausführen!





Hoffe das hilft ein wenig?!



Gruß

realTexas
Draw, circle, point, der Computer raucht einen Joint. Cls, clear, chip, er ist auf einem Trip.

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: