如何在从客户端接收消息时修复窗口冻结问题(无响应)?

时间:2013-09-08 10:23:31

标签: c++ sockets sfml

我在我的C ++代码中使用SFML。我的问题类似于这个问题(SFML TCP packet receive),但由于答案不满足我,我决定提出一个新问题。

在我的代码中,服务器和客户端需要交换确认消息才能进入程序的下一个阶段。但是,当服务器期望从客户端接收消息时,窗口会因显示“无响应”而冻结,我该如何解决?我已经让setBlocking变量为false。

我的代码如下:

sf::Socket::Status status;
string msg;
if (isServer)
{
    do {
        status = host.receiveMessage(msg);
    } while (status != sf::Socket::Done || msg!= "done1");

    status = host.sendMessage("done1");

}
else
{
    do {
        status = host.sendMessage("done1");
    } while (status != sf::Socket::Done);

    do {
        status = host.receiveMessage(msg);
    } while (status != sf::Socket::Done || msg!= "done1");
}

2 个答案:

答案 0 :(得分:0)

您应该创建一个额外的线程来与客户端进行通信。 或使用其他套接字模型,当传入数据可用时,窗口会收到一条消息。

答案 1 :(得分:0)

我不能说我自己尝试过,但您可能会发现SFML游戏开发书的source code对于查看非常有用。

关于使用sfml(最后一个)的网络有一整章,你可能会找到你需要的所有答案。