Seite 1 von 1

QThread unter Windows & MinGW

Verfasst: 30. Juli 2007 22:33
von aspleniumX
Hallo Leute,

ich bin am verzweifeln.

Ich versuche QThread unter Windows zum laufen zu bekommen.
Folgender Minicode läuft problemlos unter Linux.
Unter Windows lässt er sich auch problemlos mit qmake & make compilieren,
allerdings wird der Thread nicht gestartet.

#include <QThread>
#include <iostream>

class MyThread : public QThread
{
public:
virtual void run();
};

void MyThread::run()
{
std::cout << "Thread laeuft!" << std::endl;
}

int main()
{
MyThread thr;
thr.start();
thr.wait();
}


Ich bin an und für sich schon ein erfahrener Qt Programmierer (http://bioinfo.blogg.de) aber mit Threads habe ich bislang nur unter Linux gearbeitet.

Könnt ihr mir sagen was ich falsch mache ?

Vielen Dank !

Verfasst: 31. Juli 2007 06:28
von Christian81
Erstens sehe ich kein Q(Core)Application - also auch keine Eventloop. Und zweitens sehe ich auch nicht woher Du wissen willst das der Thread wirklich nicht gestartet wird -> Doku 'CONFIG += console'

Verfasst: 31. Juli 2007 12:29
von aspleniumX
Danke !

An "CONFIG += console" lag es ! Ist unter Linux nicht nötig.
Der Eventloop allerdings mit QtCore ist nicht nötig.

Folgender Code liefert wie erwartet laufend die Ausgaben beider Threads!

#include <QThread>
#include <iostream>

class MyThread : public QThread
{
public:
virtual void run();
};

void MyThread::run()
{
forever {
std::cout << "Thread laeuft!" << std::endl;
}
}

class MyThread2 : public QThread
{
public:
virtual void run();
};

void MyThread2::run()
{
forever {
std::cout << "Thread2 laeuft!" << std::endl;
}
}

int main()
{
MyThread thr;
thr.start();
MyThread2 thr2;
thr2.start();
thr.wait();
thr2.wait();
}


Schöne Grüße !!!

Verfasst: 1. August 2007 10:04
von Einmaliger
Vielleicht mal zur Erklärung (sofern nicht ohnehin bekannt):

Unter Windows gibt es tatsächlich eine Unterscheidung zwischen EXE-Dateien für die Konsole und EXE-Dateien mit GUI. Das heißt insbesondere, dass man in Qt-Programmen mit GUI unter Windows nichts auf der Konsole ausgeben kann. Für Debugging-Zwecke ist das natürlich grottig :(