我正在使用MacBook Pro在我的主线程中通过套接字使用多播地址和端口每隔12 mS发送一系列1024字节UDP数据报(丑陋但说明性):
for(;;) {
//-------------- Send ----------------
try {
sock.sendTo(filebufPos, readsize, mcAddr, mcPort);
sendCount++;
if(sendCount < sends_needed) {
filebufPos += readsize;
} else {
sendCount = 0; //Reset send counter
filebufPos = filebuf; //Reset pointer to start of file buffer
}
} catch (SocketException &e) {
cerr << e.what() << endl;
}
usleep(12000); //------------ Pause between sends-----------
}
在我的iPhone 5上,我尝试在回调例程中使用非阻塞'recvFrom'调用接收数据报,该回调例程每1.5 mS调用一次,ala:
try {
nBytesReceived = sock->recvFrom((void *)buf, nBytesCount, mcAddr, mcPort);
} catch (SocketException &e) {
cerr << e.what() << endl;
}
我测量iPhone客户端上成功的UDP套接字recvs之间的时间。理想情况下,我应该每8次回调(12 ms)接收UDP数据报,并且大多数情况下都是如此。然而,有时recvs之间的时间非常短,而在其他时间recvs之间的时间可能长达100-150 mS。
为什么会发生这种情况的任何想法? 谢谢!