Problem mit pthread und Qt



  • Hallo,

    ich versuche gerade ein Programm zu schreiben, dass einen Roboter den Raum in dem er sich befindet, erkunden lässt.
    Während der Roboter den Raum erkundet möchte ich, dass eine Karte von dem Raum erstellt wird.
    Der Roboter kann den Raum bereits erkunden nur das mit der Karte klappt noch nicht.
    Ich hab die Klassen main.cpp, mainWay.cpp und die header Datei mainWay.h
    in der main.cpp werden die Bewegungen von dem Roboter gesteuert und es wird ein Ausgabefenster für die Karte erstellt. Das Ausgabefenster ist vom Typ mainWay.

    int main(int argc, char** argv)
    {
    	mainWay *ausgabeFenster;
    	ausgabeFenster = new mainWay(argc, argv);
    

    .
    .
    .
    }

    In der mainWay.cpp wird ein pthread erzeugt mit einer QApplication.
    Das hier ist die mainWay.h Datei:

    #include <pthread.h>
    #include <qapplication.h>
    #include "way.h"
    
    extern bool otherThreadRunning;
    
    class mainWay {
    
    private:
    	QApplication *app;
    	pthread_t thread;
    	Main *m;
    	int argc;
    	char** argv;
    
    public:
    	void runApplication ();
    	mainWay (int argc, char** argv);
    	~mainWay();
    	void addMyLine(int x1, int y1, int x2, int y2);
    	void addMyLine();
    };
    

    So und jetzt zum Problem. Der Thread wird erstellt und der Roboter fängt an zu laufen.
    Wenn ich jedoch

    ausgabeFenster->addMyLine();
    

    in der main.cpp benutzen möchten, dann kommt der Fehler(beim compilieren):

    main.cpp : error : `addMyLine´ undeclared (first use this function)
    

    Das merkwürdige wie ich finde ist, dass ich die Funktion addMyLine innerhalb der mainWay.cpp benutzen kann, aber nicht in der main.cpp.

    Kann sich das jemand erklären?
    Ich wäre für eure Hilfe sehr dankbar.

    Gruß
    Wolf



  • Für Threads in Qt Anwendungen nimmst du am besten den QThread C++ Wrapper für PThread. Wie das geht und was der kann wird in der Doku beschrieben:

    http://doc.trolltech.com/3.3/threads.html



  • Also ich wollte eigentlich keinen Thread in einer Qt Anwendung erstelle, sondern in einen Thread eine Qt Anwendung.
    Aber dennoch danke für den Tipp.

    Ich hab jetzt meinen Fehler gefunden und korregiert.

    Ich verwende eine selbst geschriebene lib. Diese hab ich auch regelmässig aktualisiert.
    Des weiteren hab ich ein extra Verzeichniss "include" in dem ich alle header Dateien meiner selbstgeschriebenen Klassen einfüge.
    Das soll mir das kompilieren erleichtern. Das funktionier auch wunderbar, außer man vergisst diese auf dem neuesten Stand zu halten. 😡

    Das war ein blöder Fehler. Aber jetzt werde ich es bestimmt nicht mehr vergessen.


Anmelden zum Antworten