Problemchen mit QThreads

Alles rund um die Programmierung mit Qt
Antworten
je.sid
Beiträge: 2
Registriert: 24. März 2006 15:45

Problemchen mit QThreads

Beitrag von je.sid »

Hallo zusammen und ich bin neu hier und fange erst mit Qt an zu arbeiten,
aaaber ich habe schon Probleme wie die ganz großen *G*

Folgendes:
In meinem Programm muss eine Routine mehrere Slider (permanent steuern) und das GUI soll während dieser Zeit noch reagieren. Mit fork() will ich nicht arbeiten, da ich sharedmemory und signal verhindern will, also müssen threads her, die leider nicht nativ von C/C++ unterstützt werden, was ja eigentlich nicht sooo schlimm ist, weil es QThreads gibt. Doch leider wollen die nicht funktionieren. (Evtl ein newbee bug)

Ich hab folgendes System:
gcc: 3.4.4
qt: 3.3.4-r3
Muss man eigentlich beim kompilieren von gcc und qt Kompiler-flags angeben, damit qt Threads unterstüzt. Ich habe da mal so was gelesen, kann aber die Useflags nirgends finden (ich habe Gentoo, sollte ich evtl noch sagen)
Und gemacht habe ich das Gui mit dem designer und dann das Makefile mit qmake

Der Code sieht so aus:

Code: Alles auswählen

#include <qthread.h>

[...]

class MyThread : public QThread 
{
public:
    MyThread();
    ~MyThread();    
    void run();  
    void stop();
private:
    bool stopped;
};

MyThread::MyThread()
{
    this->stopped = false;
}

void MyThread::run()
{
    while(this->stopped) 
    {
	sleep(1);
	printf("Ping!\n");
    }
}

void MyThread::stop()
{
    this->stopped = true;
}

MyThread mov;

[...]

void Form1::mov_test()
{    
  mov.start(QThread::NormalPriority);
}

Ich habe dann noch gelesen, das die Option:
-DQT_THREAD_SUPPORT
noch im Makefile mit angegeben werden muß. Das ist alles noch ok. Und wenn er dann die einzelnen Dateien kompiliert (in *.o) is alles noch ok, aber sobald er dann die Sachen zusammen linken will kackt er hab.

Code: Alles auswählen

/usr/qt/3/bin/uic dmxgui.ui -o dmxgui.h
g++ -c -pipe -Wall -W -O2 -mcpu=i686  -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -I/usr/qt/3/mkspecs/linux-g++ -I. -I. -I/usr/qt/3/include -o main.o main.cpp
main.cpp: In Funktion »void handler(int)«:
main.cpp:13: Warnung: unused parameter `int sig'
g++ -c -pipe -Wall -W -O2 -mcpu=i686  -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -I/usr/qt/3/mkspecs/linux-g++ -I. -I. -I/usr/qt/3/include -o sidmousegrabber.o sidmousegrabber.cpp
sidmousegrabber.cpp: In Memberfunktion »virtual void
   SidMouseGrabber::mouseReleaseEvent(QMouseEvent*)«:
sidmousegrabber.cpp:57: Warnung: unused parameter `QMouseEvent*e'
/usr/qt/3/bin/uic dmxgui.ui -i dmxgui.h -o dmxgui.cpp
g++ -c -pipe -Wall -W -O2 -mcpu=i686  -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -I/usr/qt/3/mkspecs/linux-g++ -I. -I. -I/usr/qt/3/include -o dmxgui.o dmxgui.cpp
In file included from dmxgui.cpp:31:
dmxgui.ui.h: In Funktion »void signal_handler_IO(int)«:
dmxgui.ui.h:68: Warnung: unused parameter `int status'
/usr/qt/3/bin/moc sidmousegrabber.h -o moc_sidmousegrabber.cpp
g++ -c -pipe -Wall -W -O2 -mcpu=i686  -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -I/usr/qt/3/mkspecs/linux-g++ -I. -I. -I/usr/qt/3/include -o moc_sidmousegrabber.o moc_sidmousegrabber.cpp
/usr/qt/3/bin/moc dmxgui.h -o moc_dmxgui.cpp
g++ -c -pipe -Wall -W -O2 -mcpu=i686  -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -I/usr/qt/3/mkspecs/linux-g++ -I. -I. -I/usr/qt/3/include -o moc_dmxgui.o moc_dmxgui.cpp
g++  -o dmxgui main.o sidmousegrabber.o dmxgui.o moc_sidmousegrabber.o moc_dmxgui.o   -L/usr/qt/3/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
dmxgui.o(.text+0x16): In function `MyThread::MyThread[not-in-charge]()':
: undefined reference to `vtable for MyThread'
dmxgui.o(.text+0x46): In function `MyThread::MyThread[in-charge]()':
: undefined reference to `vtable for MyThread'
dmxgui.o(.text+0xb83c): In function `__tcf_0':
: undefined reference to `MyThread::~MyThread [in-charge]()'
moc_dmxgui.o(.gnu.linkonce.r._ZTV5Form1+0x220): undefined reference to `Form1::MyThread()'
moc_dmxgui.o(.gnu.linkonce.r._ZTV5Form1+0x224): undefined reference to `Form1::run()'
moc_dmxgui.o(.gnu.linkonce.r._ZTV5Form1+0x228): undefined reference to `Form1::stop()'
collect2: ld returned 1 exit status
make: *** [dmxgui] Fehler 1
Ich versteh das nicht. Kann mir da evtl wer helfen? (Beim Linken die Kompilieroption mit angeben bringt nichts)

THX
Jürgen
je.sid
Beiträge: 2
Registriert: 24. März 2006 15:45

Was vergessen

Beitrag von je.sid »

ich hab was vergessen zu erwähnen:

Der Code oben stammt aus der dmxgui.ui.h
Ist das überhaupt der richtige Ort um die Classe MyThread zu definieren?!

Jürgen
Antworten