Seite 1 von 1
QWaitCondition: Destroyed ...
Verfasst: 12. Februar 2010 16:47
von hs60
Hallo,
habe jetzt meinen ftp-uploader so weit fertig, jedoch gibt es einen kleinen Schönheitsfehler beim Beenden:
- QWaitCondition: Destroyed while threads are still waiting
Diese Meldung kommt, wenn ich das Programm (in Qt) beende. Wenn ich aber vor dem Beenden ca. 30 Sekunden warte und dann beende, kommt diese Meldung nicht. Auch beim Beenden der .exe kommt keine derartige Meldung.
Hat diese Meldung eine Auswirkung bzw. wie kann man diese beseitigen?
mfg
Herbert
Verfasst: 12. Februar 2010 17:09
von Christian81
Benutzt Du threads? Etwas mehr Hintergrundinfos bitte.
Verfasst: 12. Februar 2010 17:19
von hs60
Hallo,
nein, ich benutze keine Threads, nur die einfachen ftp-kommandos:
- ftp->connectToHost,
ftp->cd,
ftp->mkdir,
ftp->login,
ftp->put,
ftp->setTransferMode,
ftp->abort,
ftp->deleteLater
Meiner Meinung nach könnte es nur letzt genanntes Kommando sein. Aber laut Handbuch ist es genau so vorgegeben.
Die letzte Methode ist folgende:
Code: Alles auswählen
if (ftp) {
ftp->abort();
ftp->deleteLater();
ftp = 0;
}
mfg
Herbert
Verfasst: 12. Februar 2010 17:36
von Christian81
Und wie ist das ganze in deiner main.cpp eingebunden? Wird nachdem ftp = 0 gesetzt wird das Programm ggf. mit exit() beendet?
Verfasst: 12. Februar 2010 17:48
von hs60
Hallo,
das ist meine main:
Code: Alles auswählen
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Das Programm selbst wird mit close() beendet.
Im Destructor wird nur
ausgeführt.
Muss man ev. auch
delete ftp vor dem
delete ui aufrufen, bzw. welche Klassen muss man gezielt mit delete beenden?
Ich habe soeben versucht, auch delete ftp einzufügen, hat aber keine Änderung gehabt.
mfg
Herbert
Verfasst: 12. Februar 2010 17:54
von Christian81
Ich denke dass evtl. der ftp-Prozess noch nicht wirklich beendet wurde (weil er z.B. noch auf eine Netzwerkantwort wartet oder wer weiss warum).
Eine Idee wäre ein
connect(ftp, SIGNAL(destroyed()), this, SLOT(close()));
vor dem deleteLater() zu machen. Damit wird dein Fenster auf alle Fälle erst geschlossen wenn der ftp-Prozess komplett weg ist.
Eine weitere wäre das deleteLater() auch erst auszuführen wenn QFtp done(bool) geschickt hat -->
connect(ftp, SIGNAL(done(bool)), thp, SLOT(deleteLater()));
connect(ftp, SIGNAL(destroyed()), this, SLOT(close()));
Wenn das alles nichts hilft wäre ein kleines komplettes Testcase angebracht

Verfasst: 12. Februar 2010 18:50
von hs60
Hallo nochmals,
vielen Dank für deine Vorschläge, habe sie alle probiert, leider erfolglos.
das SIGNAL(destroyed() vom ftp löst aus und der SLOT schließt mit close() das Fenster, die Meldung kommt aber trotzdem.
Ich vermute, das hängt mit dem ui zusammen.
Eines ist mir nämlich noch aufgefallen, ich muss gleich nach dem Start des Programmes gezielt ftp = 0 setzen, ansonsten stürzt das Programm in der Routine ConnectOrDisconnect bei der Abfrage
if (ftp)
total ab, da anscheinend ftp nicht initialisiert ist und einen undefinierten Zustand aufweist. Eventuell hat dies auch eine Auswirkung auf die Meldung beim Beenden.
Ich werde morgen mal zum Vergleich aus dem Buch Qt 4.6 das Ftp-Beispiel, welches ja ohne ui auskommt, probieren und es auch mal in ui einbinden. Bin gespannt auf die Reaktion. In seinem Quellcode hat Jürgen Wolf nämlich nirgends ftp auf 0 gesetzt.
mfg
Herbert
Verfasst: 12. Februar 2010 18:52
von Christian81
Also das man Pointer mit 0 initiliseren sollte sind ja wohl C++ Grundlagen... und daran kann es definitiv nicht liegen.
Wenn es ein Testcase gäbe könnte man es mal anschauen.
Verfasst: 12. Februar 2010 19:10
von hs60
Hallo
so jetzt habe ich den Quellcode aus dem Buch probiert und siehe da:
Die gleiche Meldung beim Beenden des Programmes.
Nur eine Initialisierung des ftp suche ich im Quelltext von Jürgen Wolf vergeblich. Zufall, dass es trotzdem funktioniert?
Jedenfalls ist das für mich eine Bestätigung, dass es nicht an ui liegt. Es wäre halt nur interessant zu wissen, warum das so ist und ob es ev. Auswirkungen hat. Mir ist nämlich folgendes aufgefallen:
Mein Uploader wird stündlich von einem anderen Programm gestartet, lädt dann -zig Dateien ordnungsgemäß auf den Server und beendet sich dann wieder. Alles bestens, zumindest für die nächsten ca. 20 Starts. Irgendwann bleibt das Programm dann irgendwo hängen. Kann aber auch mit der schlechten Internet-Verbindung zusammenhängen.
Vielen Dank jedenfalls für deine Hilfe. Sollte irgendwer noch welche Ideen haben, bitte gerne.
mfg
Herbert