class MyClass:: public QThread()
{
...
void run();
QTimer DataTimer;
QUDPSocket socket;
QByteArray array;
short addr, port;
public slots:
void myslot();
void noData();
}
////////////////////////////////////////////////////////////
MyClass::MyClass()
{
}
///////////////////////////////////////////////////////////
void MyClass::run()
{
DataTimer.setInterval(3000);
connect(&DataTimer, SIGNAL(timeout()), this, SLOT(noData()));
QTimer timer;
connect(&timer, SIGNAL(timeout()), this, SLOT(myslot()), Qt::DirectConnection);
timer.start(1000);
exec();
}
///////////////////////////////////////////////////////////
void MyClass::myslot()
{
if (socket.hasPendingDatagrams())
{
DataTimer.stop();
int size = socket.bytesAvailable();
array.resize(size);
socket.readDatagram(array.data(), size, &addr, &port);
// обработка данных
DataTimer.start();
}
}
///////////////////////////////////////////////////////////
void MyClass::noData()
{
}
///////////////////////////////////////////////////////////
Задача следующая - постоянно корректно читать сетевые данные (предполагается при запуске потока запускать таймер вычитывания (если они есть конечно) раз в секунду данных из сети). Пример выше не работает - говорит "timer cannot be started from another thread". DataTimer обязателен для некой обработки ситуации отсутствия сетевых данных. И как лучше читать данные - как в примере выше или вместо if сделать while с int size=socket.pendingdatagramsize();? Или лучше как-то по-другому считывать данные? (пробовал вместо таймера запуска чтения данных использовать while(1) {чтение данных} прямо в run, но тогда возникает та же ошибка с таймером DataTimer, который обязателен)