Seite 1 von 1

Programm pausiert nach while-Schleife

Verfasst: 9. April 2010 22:34
von iru
Hey zusammen,

ich bin momentan dabei ein kleines Programm zu schreiben, das mir ein paar generelle Infos über Mp3s anzeigt. Hab das ganze in C++ unter Windows 7 in Eclipse geschrieben und keine zusätzlichen Tools wie den Designer benutzt.

Prinzipiell besteht die Gui momentan aus einer QPushButton-, einer QLinetEdit- und einer QFileDialog-Instanz. Ich habe eine Klasse FOLDER erstellt, die ich von QObject abgeleitet habe. An das Q_OBJECT-Makro hab ich auch gedacht. Dem Konstruktor der FOLDER-Klasse übergebe ich einen Pointer auf die QLineEdit-Instanz, um den Inhalt der TextBox mit dem Ordner-Pfad zu aktualisieren. Das wars eigentlich, was ich mit Qt mache.

Der Connect-Befehl sieht wie folgt aus:

Code: Alles auswählen

QObject::connect( browse, SIGNAL( clicked() ), folderContent, SLOT( vInitDir() ));
wobei browse ein Zeiger auf QPushButton ist.

vInitDir() ist eine Public-Slot-Methode der FOLDER-Klasse, von der aus die Analyse der Mp3s gestartet wird. Das eigentliche Problem taucht jetzt an einer für mich scheinbar willkürlichen Stelle auf.

Ich habe im Analyseteil eine while-Schleife. Das Problem ist, dass sobald die Abbruchbedingung der Schleife erreicht wird, das Programm genau nach der Schleife "pausiert". So würde in folgendem Beispiel der Text gar nicht erst ausgegeben werden:

Code: Alles auswählen

while(1)
break;
cout << "bla\n";
Klicke ich erneut auf den Button und wähle den Ordner erneut aus, setzt das Programm scheinbar an besagter Stelle fort und gibt den Text aus, den es ausgeben soll, pausiert bei der letzten Mp3 aber wieder an genau der gleichen Stelle. Ich kann mir das Problem wirklich nicht erklären und wäre daher sehr für eure Hilfe dankbar, da ich stark annehme, dass es an einer nicht ordnungsgemäßen Qt-Handhabung meinerseits liegt, die ich aber selber nicht erkenne. Hab auch schon nach Diversem hier im Forum gesucht, ohne Erfolg. Hoffe, ich hab nicht nur schlampig gesucht :oops:

Viele Grüße,
iru

Verfasst: 10. April 2010 09:05
von Christian81
Wenn Du CPU-lastige Dinge machst sollten die in einem extra Thread da sonst (wie in deinem Fall) die MainLoop blockiert wird und die GUI einfriert.