ich habe eine Frage an euch. Eins vorab, ich benutze Visual Studio 2008 + QT 4.5. Ich möchte zwei Klassen von QThread ableiten. Einmal eine für meine GUI und einmal für meine UDP Kommunikation. Ich habe mir meine GUI mit dem QT-Designer zusammen geklickt. Ich denke das muss nicht kommentiert werden.
Code: Alles auswählen
#include "allneededheader"
class Gui : public QMainWindow
{
Q_OBJECT
public:
Gui(QWidget *parent = 0, Qt::WFlags flags = 0);
~Gui();
private slots:
void Initialize();
private:
Ui::GuiClass ui;
Com *myCom;
};
Gui::Gui(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags)
{
ui.setupUi(this);
Gui::connect( ui.btnInitialize, SIGNAL( clicked() ),this, SLOT( Gui::Initialize() ) );
}
void Gui::Initialize()
{
bool rc;
rc = myCom->initialize( 10 );
}
Code: Alles auswählen
class Com : public QObject
{
Q_OBJECT
public:
Com(QTextEdit *textEdit);
~Com();
bool initialize(unsigned char);
private slots:
void timeOut();
void UdpPackage();
private:
QUdpSocket *udpSocket;
QTimer *timer;
QMutex *mutex;
};
Code: Alles auswählen
Com::Com()
{
udpSocket = new QUdpSocket( this );
timer = new QTimer( this );
timer->setInterval( 5000 );
connect( timer, SIGNAL( timeout() ), this, SLOT( timeOut() ) );
connect( udpSocket, SIGNAL(readyRead() ), SLOT( getUdpPackage() ) );
// Öffne einen Port zum empfangen von Nachrichten
udpSocket->bind( QHostAddress::QHostAddress( "IP" ), Port);
}
Code: Alles auswählen
Com::~Com(void)
{
udpSocket->close();
delete udpSocket;
delete timer;
delete mutex;
}
Code: Alles auswählen
bool Com::initialize( unsigned char INITIALIZE )
{
sendUdp( INITIALIZE );
timer->start();
mutex->lock();
*
*
return rc;
}
Code: Alles auswählen
void Com::timeOut()
{
timer->stop();
*
*
//Mutex wieder freigeben
mutex->unlock();
}
Code: Alles auswählen
void Com::UdpPackage()
{
//Timer stoppen
if ( timer->isActive() )
timer->stop();
*
*
*
//Mutex wieder freigeben
mutex->unlock();
}
Mein zweites Problem ist noch, das ich in der Methode "initialize" von der Kommunikationsklasse nicht auf die Mutex warten kann. Mir ist dabei wichtig, das diese einen Rückgabewert hat, jetzt in diesem Fall ein boolscher Wert, damit ich das erfolgreich oder nicht erfolgreich signalisieren kann. Deswegen möchte ich da warten, ob der Timer oder ein UDP Paket gekommen ist.
Würde mich sehr freuen, wenn ihr mir weiterhelfen könnt oder hoffe auf Anregungen. Vielleicht hat jemand soetwas schon implemetiert und kann mir eine bessere Lösung vorschlagen.
Danke
Gruss
Apollinaris
Ich benutze Visual Studio 2008 + QT 4.5 (open source)