来自for循环的超时

时间:2015-12-02 12:16:51

标签: c++

我正在使用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
}

4 个答案:

答案 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