【发布时间】:2025-12-04 17:05:01
【问题描述】:
我有一个带有多线程客户端应用程序的工作套接字控制台服务器。我只创建了控制台或 OpenGL 应用程序。所以一个windows应用是新的。
我正在将我的 stocket 服务器代码移植到 Win32 API 应用程序,但遇到了一些麻烦。服务器运行,客户端正确连接和通信,但服务器窗口冻结。
从我的屏幕截图中,您可以看到我的服务器消息正在输出到我的文本框中。但是在到达 msg 循环时,应用程序会冻结。
我已经从
更新了我的消息循环while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
到
boolean running = TRUE;
while (running) {
if (PeekMessage(&sys.msg, NULL, 0, 0, PM_REMOVE)) {
if (sys.msg.message == WM_QUIT)
{
running = FALSE;
//exitCode = msg.wParam;
break;
}
TranslateMessage(&sys.msg);
DispatchMessage(&sys.msg);
}
try {
pseucode_socket_checking();
}
catch (std::exception& e) {
running = FALSE;
}
}
pseucode_socket_checking() {
SOCKET incoming = INVALID_SOCKET;
incoming = accept(server_socket, NULL, NULL);
if (incoming == INVALID_SOCKET) return;
...
// create thread for socket.
}
【问题讨论】:
-
使用异步套接字api和
AcceptEx -
@RbMm 您的偏好是异步还是线程?我的背景是 PHP,所以需要一段时间才能再次适应严格的 c。
-
我的选择当然是异步 i/o。但对你来说这可能很难
标签: c++ visual-studio winapi