QFtp in einem Thread?

Alles rund um die Programmierung mit Qt
Antworten
tsteinmaurer
Beiträge: 18
Registriert: 13. Juli 2007 10:15

QFtp in einem Thread?

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wo ist die Event-Loop deines Threads?
tsteinmaurer
Beiträge: 18
Registriert: 13. Juli 2007 10:15

Beitrag 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
Antworten