Ganz einfache Konsolenanwendung

Alles rund um die Programmierung mit Qt
Antworten
sahl04
Beiträge: 2
Registriert: 18. Oktober 2007 22:12

Ganz einfache Konsolenanwendung

Beitrag 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
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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?
sahl04
Beiträge: 2
Registriert: 18. Oktober 2007 22:12

Beitrag 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
Antworten