ich möchte immer mit einem udp server verbunden sein jedoch sollte meine gui nicht blockieren...
aus diesem grund habe ich den udp socket in einem thread ausgelagert...
der thread soll neben den lesen und verarbeiten der daten auch später noch signals verschicken (wurde noch nicht implementiert...)
der code funktioniert jedoch möchte ich wissen ob dieses design richtig ist...
Code: Alles auswählen
#include "uthread.h"
#include <iostream>
UThread::UThread(QObject* parent) : QThread(parent)
{
}
void UThread::run() {
//Setup
socket = new QUdpSocket();
socket->bind(QHostAddress::LocalHost, 2323);
QObject::connect(socket, SIGNAL(readyRead()), this, SLOT(readData()), Qt::DirectConnection);
exec();
}
void UThread::readData() {
while(socket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(socket->pendingDatagramSize());
QHostAddress sender;
quint16 port;
socket->readDatagram(datagram.data(), datagram.size(), &sender, &port);
parse(datagram);
}
}
void UThread::parse(QByteArray data) {
QString q(data);
std::cout << q.toStdString() << std::endl;
}
Ich habe bei der slot connection folgendes verändert und danach lief alles: (DirectConnection hinzugefügt).
Code: Alles auswählen
QObject::connect(socket, SIGNAL(readyRead()), this, SLOT(readData()), Qt::DirectConnection);
vielen Dank