Seite 1 von 1

Ganz einfache Konsolenanwendung

Verfasst: 31. Oktober 2007 09:18
von sahl04
Hallo zusammen,

ich habe ein vermutlich leicht zu lösendes Problem mit einer einfachen Konsolenanwendung.

Code: Alles auswählen

int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);

	MyClass cleaner;
	cleaner.doCleanup();

	return a.exec();
}
Das ganze Programm ist eigentlich in cleaner.doCleanup() enthalten und wenn a.exec() ausgeführt wird, schließt sich die Konsolenanwendung natürlich nicht mehr weil kein Programmteil mehr ein QCoreApplication::exit() ausführen wird.

Lasse ich die Zeile
return a.exec();
einfach weg, dann erhalte ich am Programmende eine Exception
in

Code: Alles auswählen

inline int q_atomic_decrement(volatile int *ptr)
{ return _InterlockedDecrement(reinterpret_cast<volatile long *>(ptr)); }
Ist es erforderlich, dass mein cleaner.doCleanup() als eigenständiger Thread ausgeführt wird oder gibt es eine einfacherere Lösung?

Vielen Dank im Voraus
Dirk

Verfasst: 31. Oktober 2007 09:28
von CaptnChaos
ich verstehe nicht ganz dein problem. was funktioniert denn nicht? was willst du haben?
Für konsolenanwendungen musst du in der porjekt datei

Code: Alles auswählen

QT += console
einfügen.
und solange du nichts parallel zu deinem cleaner machen musst, brauchst du keine threads.

Verfasst: 31. Oktober 2007 12:17
von upsala
Die Frage ist was deine MyClass überhaupt macht. Bestimmte Dinge brauchen nämlich überhaupt keine QCoreApplication und auch keine Event-Routine. Verwendest du Netzwerk, Timer, Event-Handler oder Grafik-Funktionen?

Verfasst: 1. November 2007 09:39
von sahl04
upsala hat geschrieben:Die Frage ist was deine MyClass überhaupt macht. Bestimmte Dinge brauchen nämlich überhaupt keine QCoreApplication und auch keine Event-Routine. Verwendest du Netzwerk, Timer, Event-Handler oder Grafik-Funktionen?
Vielen Dank für den Tip.
Mein Progrämmchen reduziert sich jetzt auf

Code: Alles auswählen

int main(int argc, char *argv[]) 
{ 
   MyClass cleaner; 
   cleaner.doCleanup(); 
}
Die Ursache für die Exception lag natürlich wieder an einer ganz anderen Stelle (Der Destruktor eines Objektes wurde mehrfach aufgerufen).

Gruß
Dirk