0
在同步模式下,QUDPSocket可以在沒有事件循環的情況下使用。 而且我發現下面的例子:Qt:同步UDP套接字中是否需要waitForReadyRead/waitForBytesWritten?
#include <QUdpSocket>
#include <QTextStream>
int main()
{
QTextStream qout(stdout);
QUdpSocket *udpSocket = new QUdpSocket(0);
udpSocket->bind(3838, QUdpSocket::ShareAddress);
while (udpSocket->waitForReadyRead(-1)) {
while(udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
udpSocket->readDatagram(datagram.data(), datagram.size(),
&sender, &senderPort);
qout << "datagram received from " << sender.toString() << endl;
}
}
}
我的問題是:是waitForReadyRead必要在這裏?如果我不擔心CPU消耗,可以使用一段時間(1)嗎? 如果我需要寫,是否有必要添加一個waitForBytesWritten?
我曾經在Qt下的同步模式下使用TCP套接字,在沒有waitForReadyRead調用的情況下它根本不工作。
'QAbstractSocket'文檔指出,調用'waitForReadyRead'是讀取和調用'waitForBytesWritten'所必需的,用於刷新同步模式下的寫入更改。 'QTcpSocket'和'QUdpSocket'似乎沒有區別。 –
但有人說QUDPSocket實際上是無緩衝的,所以不需要等待,因爲應用程序直接與操作系統的buffere交談? – Nyaruko
這可能是真的,但文檔沒有說明,所以它是有風險的。您可以閱讀'QUdpSocket'源文件來驗證。 –