[gelöst] QFtp Signale "hängen"

Alles rund um die Programmierung mit Qt
Antworten
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

[gelöst] QFtp Signale "hängen"

Beitrag von hs60 »

Hallo,

Habe folgendes Problem:

Ich starte mein Programm (Uploader). Der Bildschirm ist wie eingefroren.
Es werden so lange keine (ftp)-Signale (commandFinished, done, etc.) ausgelöst, bis ich die Maus irgendwo in das Fenster bringe. Sobald die Maus auch nur den Fensterrand berührt, werden die Signale ausgelöst und das Programm arbeitet normal weiter.

Was mir noch aufgefallen ist, dass das nicht auf allen Rechner auftritt, sondern eher nur auf den etwas schnelleren. Auf einem relativ alten und langsamen Rechner (Betriebssystem Windows XP) läuft alles normal ab, auf einem schnelleren (Betriebssystem Windows Vista) tritt dieses Verhalten auf.

Woran kann das liegen bzw. wie kann ich Abhilfe schaffen?

mfg
Herbert
Zuletzt geändert von hs60 am 15. Februar 2010 12:06, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ohne etwas Quellcode wüsste ich nichts...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

Beitrag von hs60 »

Hallo Christian,

ich sende den Befehl ab:

Code: Alles auswählen

    ftp->connectToHost(url.host(), ui->lePort->text().toInt());
Danach spricht noch das Signal an:

Code: Alles auswählen

  if (ftp->state() == QFtp::HostLookup) {
        ui->lvLog->addItem(tr("Host-Name %1 wird aufgelöst...").arg(url.host()));
    }
Als nächstes ftpStatus-Signal sollte noch kommen:

Code: Alles auswählen

QFtp::Connecting
tut es aber nicht. Es steht alles, bis ich mit der Maus über das Fenster komme.

Nachtrag:
Irgendwie muß es aber mit dem Rechner bzw. mit dem Betriebssystem zusammenhängen. Ich habe das Programm jetzt auf 2 anderen Rechnern mit jeweils dem Betriebssystem Windows XP probiert und auf beiden Rechnern läuft das Programm fehlerfrei.

Warum es auf dem Entwicklungsrechner (mit Betriebssystem Vista) nicht so mag, ist mir ein Rätsel. Aber vielleicht hat der eine oder andere ebenfalls ein ähnliches Problem (gehabt).

mfg
Herbert
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

Beitrag von hs60 »

Hallo noch einmal,

habe das Problem gefunden:

Ich hatte einen Button eingebaut, mit dem der Benutzer die Möglichkeit hat, die automatische Programmausführung innerhalb von 5 Sekunden nach Start abzubrechen. Zu diesem Zweck zeigte eine ProgressBar sekündlich den Fortschritt an. Realisiert hatte ich dies mit 2 Timern ( es fiel mir nichts besseres ein ). Der erste Timer hatte ein TimeOut nach 5 Sekunden, der 2. Timer aktualisierte sekündlich den Fortschrittsbalken (Signal/Slot). Und hier lag für mich unergründlich das Problem. Nach Entfernen des 2. Timers läuft jetzt auch auf dem Entwicklungsrechner alles fehlerfrei.

Das Problem, welches ich jetzt noch habe, ist die Anzeige der abgelaufenen Zeit in der ProgressBar (sekündlich). Muss ich mir noch etwas anderes einfallen lassen. Vielleicht ist das ja auch mit nur einem Timer möglich.

mfg
Herbert
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

FYI:
QFtp hat das Signal

void dataTransferProgress ( qint64 done, qint64 total )

Damit kannst du problemlos, ohne Timer, auf deine Progressbar malen.
hs60
Beiträge: 31
Registriert: 13. Januar 2010 16:54

Beitrag von hs60 »

Hallo,

diese ProgressBar wird nicht während des Datentransfers verwendet, sondern als Zeit-Zeiger für die abgelaufenen Sekunden. Aber ich habe das bereits gelöst, indem ich einfach den timer->start(1000) gesetzt habe und per Signal/Slot jede Sekunde einfach den progressBar->value erhöhe.

Warum der Timer bei einem Rechner "verrückt" gespielt hat, ist mir nach wie vor ein Rätsel, aber jetzt funktioniert es wenigstens.

Vielen Dank für deine Antwort.

mfg
Herbert
Antworten