c++ - 从客户端接收消息时如何解决窗口卡住问题(无响应)?

标签 c++ sockets sfml

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

在我的代码中,服务器和客户端需要交换确认消息才能继续程序的下一阶段。但是,当服务器期望从客户端接收消息时,窗口因显示“Not Responding”而卡住,我该如何解决?我已经让 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");
}

最佳答案

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

关于c++ - 从客户端接收消息时如何解决窗口卡住问题(无响应)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18682649/

相关文章:

c++ - C++ SFML 的性能问题

c++ - 从 gcc 5.4 升级到 gcc 6.3 std::thread std:ref 问题

c++ - 有没有办法将 boost 信号和插槽与不可复制的对象一起使用?

c++ - 如何在 C++ 中将对象存储在另一个对象中?

c++ - 成员访问不完整类型错误

python - 您如何通过 Python(而不是通过 Twisted)运行 Twisted 应用程序?

c++ - 警告 C4307 : '*' : integral constant overflow

c# - 本地主机上套接字的奇怪行为

运行套接字时android无法关闭对话框

c++ - SFML "failed to create the font face"问题