Seite 1 von 1

QFtp in einem Thread?

Verfasst: 30. Oktober 2007 17:01
von tsteinmaurer
Hallo,

ich arbeite in einem eigenen Thread eine SQLite Tabelle ab und will einen bestimmten Inhalt als Text-File via FTP auf einen Server stellen. Das Problem an der Sache ist, dass es so aussieht, als wenn QFtp in einem eigenen Thread nicht funktioniert, d.h. keine Daten übermittelt. Ein vereinfachtes Beispiel:

Code: Alles auswählen

#include <QCoreApplication>
#include <QByteArray>
#include <QDebug>
#include <QFtp>
#include <QThread>


class FtpThread: public QThread {
public:
	FtpThread(const QString name);
	virtual void run();
private:
	QString m_name;
};

FtpThread::FtpThread(const QString name): m_name(name)
{
}

void FtpThread::run()
{
	QFtp *m_ftp;
	QByteArray *m_ba;
	
	m_ftp = new QFtp();
	m_ba = new QByteArray();
	int i;
	
	m_ftp->connectToHost("mydomain");
    m_ftp->login("user", "pwd");
	
	for (i = 1; i <= 100; i++) {
	  m_ba->clear();
	  m_ba->append(i);
      m_ftp->put(m_ba->data(), "test" + QString::number(i), QFtp::Ascii);
	}
	
	m_ftp->close();
}


int main(int argc, char *argv[])
{
      QCoreApplication app(argc, argv);
      FtpThread ft1("ft1");
      
      ft1.start();

      return app.exec();
}
Wenn ich aber nun den kompletten Code der run() Methode in das main kopiere, dann funktioniert das Erstellen von Dateien am FTP-Server. Zum Beispiel:

Code: Alles auswählen

#include <QCoreApplication>
#include <QByteArray>
#include <QDebug>
#include <QFtp>
#include <QThread>


class FtpThread: public QThread {
public:
	FtpThread(const QString name);
	virtual void run();
private:
	QString m_name;
};

FtpThread::FtpThread(const QString name): m_name(name)
{
}

void FtpThread::run()
{
}


int main(int argc, char *argv[])
{
      QCoreApplication app(argc, argv);
/*
      FtpThread ft1("ft1");
      
      ft1.start();
      */
	QFtp *m_ftp;
	QByteArray *m_ba;
	
	m_ftp = new QFtp();
	m_ba = new QByteArray();
	int i;
	
	m_ftp->connectToHost("mydomain");
    m_ftp->login("user", "pwd");
	
	for (i = 1; i <= 100; i++) {
	  m_ba->clear();
	  m_ba->append(i);
      m_ftp->put(m_ba->data(), "test" + QString::number(i), QFtp::Ascii);
	}
	
	m_ftp->close();
      

      return app.exec();
}

Hat jemand eine Idee, wie ich aus meinem Thread mit QFtp arbeiten kann?

Verwende QT 4.3.


Danke,
Thomas

Verfasst: 30. Oktober 2007 17:06
von upsala
Wo ist die Event-Loop deines Threads?

Verfasst: 31. Oktober 2007 19:19
von tsteinmaurer
Hallo,

das mit der Event-Loop war genau der richtige Schubser in die richtige Richtung. Bei Verwendung von [b]exec()[/b] am Schluß in der run() Methode klappt nun auch die Verwendung von QFtp im Thread.

Herzlichen Dank!
Thomas