我試圖用我已經在一個單獨的QThread
使用qUdpSocket
寫了一個udpReceiver
類接收一些接收的數據包:UDP包不QThread的
class udpThread : public QThread
{
private:
QObject * parent;
public:
udpThread(QObject * parent = 0)
{
this->parent = parent;
}
void run()
{
UdpReceiver * test = new UdpReceiver(parent);
}
};
class UdpReceiver : public QObject
{
Q_OBJECT
private:
QUdpSocket * S;
int port;
public:
UdpReceiver(QObject* parent = 0) : QObject(parent)
{
port = 9003;
initialize();
}
UdpReceiver(int p,QObject* parent = 0) : QObject(parent)
{
port = p;
initialize();
}
void initialize()
{
S = new QUdpSocket();
S->bind(port);
S->connect(S,SIGNAL(readyRead()),this,SLOT(readPendingDiagrams()));
qDebug() << "Waiting for UDP data from port " << port << " ... \n";
}
public slots:
void readPendingDiagrams()
{
while(S->waitForReadyRead())
{
QByteArray datagram;
datagram.resize(S->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
S->readDatagram(datagram.data(), datagram.size(),&sender, &senderPort);
qDebug() << datagram.size() << " bytes received .... \n";
qDebug() << " bytes received .... \n";
}
}
};
這裏是main()
方法:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// UdpReceiver * net = new UdpReceiver();
MainWindow w;
udpThread * ut = new udpThread();
ut->start();
w.show();
return a.exec();
}
現在,當我使用udpReceiver
類來獲取數據包,而不只是正常的QThread
,但是當我使用udpThread
類它不會報文,或在至少raedyread()
信號不會激活某些方式。 當我嘗試獲取沒有QThread
的數據包時,我的GUI以某種方式崩潰,整個程序掛起,這就是爲什麼我想使用QThread
。 我很欣賞你能不能幫我解決這個:) 問候,
你在'run()'函數中遺漏了一些代碼嗎?你所要做的就是創建你的'UdpReceiver',然後退出正在運行的線程。 – RobbieE