这些天通常的模式似乎是在单独的线程中运行阻塞 IO,然后使用在主线程上运行的回调/观察者。这种模式与在主线程上运行所有 GUI 工作的现代最佳实践相得益彰。
编辑:
对不起,错过了服务器是 C++ 的。
澄清...
在客户端,您将有两个线程。GUI 和交互的主线程,以及建立连接时产生的通信线程。这两个线程将使用观察者设计模式的一些变体进行通信,这意味着“回调”或实际的观察者。这允许主线程在不冻结 GUI 的情况下继续。确保当通信线程调用时,调用以某种方式分派到主线程。
在服务器端,您通常会有相同模式的一些变体。将有一个主线程侦听连接,然后为每个创建的连接生成一个线程(或进程)。只要会话存在,通信线程就会存在。这允许通信线程在不阻止主线程接受新连接的情况下进行阻塞调用。
真的是一样的想法。
有很多变体,尤其是对于服务器端。重点通常是为了节省资源并避免重复工作,因此您希望限制允许的线程数,并且您可能希望重新使用它们(“线程池”)。
至于究竟如何在 C++ 中做到这一点,这不是一个容易回答的问题。像 C# 和 Java 这样的现代语言有一种明确定义的方式来做到这一点,但 C++ 在这方面是不可知的。没有“C++”答案,但会有“C++ on Windows”答案。不是 Windows 的人,我在这里帮不了你。