in LOG schreiben bevor konsolen programm durch benutzer geschlossen wird....
-
Man sollte übrigens noch erwähnen, dass man damit nicht alle Möglichkeiten abfangen kann, ein Programm zu beenden. Windows XP kennt auch Methoden um einen Prozess ohne vorherige Ankündigung direkt zu beenden und einen Stromausfall kann man so natürlich auch nicht abfangen[*].
[*]: Außer im Falle einer Notstromversorgung
.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
d.h. du musst sicherstellen dass sich der haupt-thread und der thread in dem der "ConsoleHandler" ausgeführt wird nicht in die quere kommen.
meine kenntnisse übersteigt das "wie ich sicherstelle.."

Windows XP kennt auch Methoden um einen Prozess ohne vorherige Ankündigung direkt zu beende
damit wäre der taskmanager und "prozess beenden" gemeint ?
ne notstromversorgung habe wir glaub ich..wahrscheinlich bleibe ich aber schlicht dabei das ich einfach nur in die log schreibe wenn das programm gestartet wird. wenns zweimal hintereinander gestartet wird ist ja sowieso klar das es vorher beendet wurde...
es sei denn ich bekomme raus wie ich sicherstelle das hauptthread und consolehandler sich nicht in die quere kommen... was würde denn passieren wenn sie es täten?
-
#include <cstdlib> void AusUndVorbei() { printf("Bye Bye !"); } int main() { atexit(AusUndVorbei); }
-
wieso nicht gleich so einfach? oder gibts nen haken dabei??
blöd ist nur ich darf der funktion keinen wert übergeben...
und das doppelte ofstream sieht auch blöd aus lässt sich aber wohl nicht vermeiden...ich könnte ja auch ein "atexit(logfile.put("blabla"))" setzten.. aber das lässt er auch nicht zu
void bla() { std::ofstream logfile("LOG.txt", std::ios_base::app); logfile << time_now() << " " << "Statwriter stopped." << std::endl; } int main() { char version[25] = "StatWriter v1.5"; SetConsoleTitleA(version); std::ofstream logfile("LOG.txt", std::ios_base::app); logfile << "\n" << time_now() << " " << version << " started." << std::endl; atexit(bla);
-
#include <cstdlib> static char* version = "StatWriter v1.5"; void AusUndVorbei() { printf("%s" version); } int main() { atexit(AusUndVorbei); }Und so?

-
hab mein beitrag editiert...
reicht wenn da steht statwriter.. die version ist da egal

so passt das... danke euch allen

ich frag mich aber trotzdem .. was der unterschied zu atexit und dem bsp von ..... ist
-
Mit einem Konsolenprogramm geht das nicht in jedem Fall oder nur bedingt. Bei einer Windows-Anwendung machst du unter WM_DESTROY noch eine LOG-Eintragung 'Programm verabschiedet sich!'
-
wie nicht in jedem fall oder nur bedingt?
also so funktioniert das recht gut.. bisher hatte ich da auch keine feherlemdlungen o.ä. ...
natürlich schreibt er nicht in die log wenn ich den prozess kille... aber das kommt, sollte ja eh nicht vorkommen
-
Die Funktion aus signal.h müsste diesen Job doch auch erfüllen.