我正在使用UDP服务器和客户端,我将数据从客户端发送到服务器,反之亦然。但正如你们知道UDP的“发送并祈祷”并希望它到来。
我希望有一个for循环,如果时间超过'X'秒就会退出,即使它没有完成。因为你不能保证一切都会到来。
有没有一种简单的方法可以做到这一点而不会增加我的for循环?
for (int i = 0; i < split ; i++){
iResult = recvfrom(RecvSocket, RecvBuf, BufLen, 0, (SOCKADDR *)& SenderAddr, &SenderAddrSize);
cout << "Receiving " << BufLen << endl;
sum += BufLen;
//IF X seconds goes cancel loop with
//timeout something something
}
答案 0 :(得分:1)
你可以使用C ++ 11时间功能轻松地完成时间,例如std :: chrono等。如果你想从阻塞读取中醒来,你需要选择或民意调查或亲戚(epoll / pselect)。
答案 1 :(得分:0)
在循环开始前设置闹钟/定时器。
答案 2 :(得分:0)
如果你不关心确切的超时,这可能是一个非常简单的方法:
for(int col = 0; col < numTilesAcross; col++) {
BufferedImage[] subimage = new BufferedImage[s.length];
subimage[0] = tileset[0].getSubimage(
col * tileSize,
0,
tileSize,
tileSize
);
tiles[0][col] = new Tile(subimage, Tile.NORMAL);
subimage[0] = tileset[0].getSubimage(
col * tileSize,
tileSize,
tileSize,
tileSize
);
tiles[1][col] = new Tile(subimage, Tile.BLOCKED);
}
答案 3 :(得分:0)
{{1}}
这将在30秒后打破循环。 更多信息: https://msdn.microsoft.com/en-us/library/t3282fe5.aspx