Seite 1 von 1

Asynchrones Versenden einer Datei

Verfasst: 18. September 2013 12:57
von jw202
Hallo,

ich habe eine Frage. Ich möchte ein Programm zu versenden von Dateien schreiben. Das Empfangen ist kein Problem. Ein QTcpServer, der mit dem Signal ReadyRead() verbunden ist und schreibt, sobald neue Daten ankommen. Das Problem ist allerdings das Versenden. Dieses läuft nach dem Prinzip ab:

Code: Alles auswählen

while(1)
{
            int totalWritten = 0;
            file->open(QIODevice::ReadOnly);
            QByteArray read;
            while(1)
            {
                read.clear();
                read = file->read(16384*8);
                if(read.size()==0)
                    break;

                totalWritten += sendSocket->write(read);
                sendSocket->waitForBytesWritten();
                read.clear();
                sendSocket->flush();
            }
            file->close();
}
Das Problem hierbei ist, dass diese While-Schleife bei großen Dateien sehr lange läuft und währendessen der GUI nicht reagiert. Gibt es einen asynchronen Weg um Dateien zu versenden?

EDITED: ich möchte so gut wie es geht auf Threads verzichten. Ich denke bei der Lösung an so etwas ähnliches wie QFtp. 'Gibt es da etwas?

Re: Asynchrones Versenden einer Datei

Verfasst: 18. September 2013 16:19
von trendyAndy
Servus!

Im Forum gibts einen Thread der heißt QFTP. Da steht einiges drin...
http://www.qtforum.de/forum/viewtopic.p ... 031#p65402

Gruß

Re: Asynchrones Versenden einer Datei

Verfasst: 1. Oktober 2013 15:00
von jw202
Hallo


QFTP war mein erster Gedanke, allerdings wird ein eigenes Protokoll verwendet und nicht FTP. Es geht mir primär darum, dass ich die while-Schleife zum Senden irgendwie durch ein asynchrones Konstrukt ersetzen könnte, da während der while-Schleife der GUI streikt. QFTP würde das Problem lösen, wenn die andere Seite FTP verwenden würde. Aber dann bräuchte ich auf der anderen Seite einen FTP-Server.

LG

Re: Asynchrones Versenden einer Datei

Verfasst: 1. Oktober 2013 19:29
von dazedly
Wirf die Schleife in einen Thread und das Versenden ist asynch.