Seite 1 von 1

[gelöst]QThread Parameterübergabe

Verfasst: 16. August 2010 11:28
von Alex66955
Hallo Community,

Ich habe einen kleinen hänger und komme nicht weiter. Ist eine ganz Simple Sache.

Ich möchte beim erstellen einer Thread Klasse Parameter übergeben.. Über den normalen weg mit einer Methode in der Thread Klasse z.b setSettings und dann die Werte vor dem Thread start übergeben funktioniert nicht --> sprich diese sind dann nach dem start des thread nicht mehr bekannt.


Momentane Implementierung:

Code: Alles auswählen


#ifndef SEARCHVEHICLE_H
#define SEARCHVEHICLE_H

#include <QThread>
#include "vehicle.h"
#include "connectftp.h"

class SearchVehicle : public QThread {
    Q_OBJECT
public:
    SearchVehicle(QMap<QString, QVariant> settings, QWidget *parent=0);
    void run();

    ~SearchVehicle();


private:
    QMap<QString, QVariant> ftpSettings;
    QWidget *parent;
};

#endif // SEARCHVEHICLE_H

Code: Alles auswählen

#include "searchvehicle.h"


void SearchVehicle::run() {
    searchFileInfos();
}

SearchVehicle::SearchVehicle(QMap<QString,QVariant> settings, QWidget* parent) :ftpSettings(settings), parent(parent){

}

void SearchVehicle::searchFileInfos() {
     //ftp settings hier nicht verfügbar
}

Code: Alles auswählen

        QMap<QString, QVariant> ftpSettings;
        ftpSettings["host"] = "dfsdfs";
        SearchVehicle *vehicleSearch = new SearchVehicle(ftpSettings, this);
        vehicleSearch->start(QThread::NormalPriority);

Verfasst: 16. August 2010 11:41
von RavenIV
ganz klar.
Du musst die übergebenen Parameter als Member-Variablen im Konstruktor ablegen. Dann kannst Du auf diese Member-Variablen aus Deiner Klasse zugreifen.

Verfasst: 16. August 2010 11:54
von franzf
RavenIV hat geschrieben:Du musst die übergebenen Parameter als Member-Variablen im Konstruktor ablegen.
Macht er doch, via Initialisierungsliste.
Das Problem das ich sehe: void SearchVehicle::searchFileInfos() fehlt in der Klassendefinition. Da sollten aber noch andere Meldungen kommen.

Prinzipiell: Keine eigenen Interpretationen posten, sondern die komplette Fehlermeldung des Compilers. Da braucht man dann nicht raten ;)

Verfasst: 16. August 2010 12:03
von Alex66955
Ja hast Recht beim reinkopieren in das Forum Fenster ist das wohl verloren gegangen. Also ist im Sourcecode enthalten und die Applikation lässt sich auch starten.

Code: Alles auswählen

class SearchVehicle : public QThread {
    Q_OBJECT
public:
    SearchVehicle(QMap<QString, QVariant> settings, QWidget *parent=0);
    void run();
    ~SearchVehicle();


private:
    QMap<QString, QVariant> ftpSettings;
    QWidget *parent;

    void searchFileInfos();
};
Das Problem ist ich bekommen keine Fehlermeldung.. Beim durchlauf mit dem Debugger sind die FtpSettings in der SearchVehicle Methode bzw Klasse verfügbar. Jedoch nicht mehr in der searchFileInfos Methode.

Verfasst: 16. August 2010 12:17
von Alex66955
Problem gelöst.
Habe vergessen ein EventLoop einzubauen so hat sich der Thread geschlossen bevor er mit den Parametern arbeiten konnte.( Die Parameter wurden an eine QFtp Klasse weitergegeben die ja wiederum einzelne Thread startet)