Добрый день.
Ест класса запускаемый в отдельном потоке, в нем создаются UDP сокеты, и слушаются.
Пакеты идут, но у сокетов не вызывается сигнал readyRead.
h
class ReadImit : public QObject
{
Q_OBJECT
public:
explicit ReadImit(QObject *parent = 0);
signals:
void f1(s1Data);
void f2(s2Data);
public slots:
private slots:
void readPendingDatagramsIP1();
void readPendingDatagramsIP2();
private:
QUdpSocket* udpSocketIP1;
QUdpSocket* udpSocketIP2;
};
class ControlReadImit: public QThread
{
Q_OBJECT
public:
ControlReadImit()
{
qRegisterMetaType< s1Data> ("s1Data");
qRegisterMetaType< s2Data> ("s2Data");
}
signals:
// signal to thread
// signal from thread
void f1(s1Data);
void f2(s2Data);
private:
void run()
{
ReadImit threadReadImit;
// signal from thread
connect(&threadReadImit, SIGNAL(f1(s1Data)), this, SIGNAL(f1(s1Data)));
connect(&threadReadImit, SIGNAL(f2(s2Data)), this, SIGNAL(f2(s2Data)));
//исправление по комментарию
exec();
}
};
cpp
ReadImit::ReadImit(QObject *parent) :
QObject(parent)
{
udpSocketIP1 = new QUdpSocket(this);
udpSocketIP1->bind(QHostAddress::Any, PORT_IP1);
udpSocketIP2 = new QUdpSocket(this);
udpSocketIP2->bind(QHostAddress::Any, PORT_IP2);
connect(udpSocketIP1, SIGNAL(readyRead()), SLOT(readPendingDatagramsIP1()));
connect(udpSocketIP2, SIGNAL(readyRead()), SLOT(readPendingDatagramsIP2()));
}
void ReadImit::readPendingDatagramsIP1()
{
while (udpSocketIP1->hasPendingDatagrams()) {
......
}
}
void ReadImit::readPendingDatagramsIP2()
{
while (udpSocketIP2->hasPendingDatagrams()) {
......
}
}