我正在创建一个简单的在线聊天服务器和客户端在一个应用程序。我写了客户端,但我不知道如何将正确使用QTcpServer。1.我需要在新线程中创建QTcpServer吗?这样我就可以从这个应用程序中以客户端的身份连接到它。如果需要,怎么做?或者它是无用的,不需要的想法?1.需要我为每个新连接创建新线程来处理它吗?我正在为一所大学开发一个聊天课程项目
xiozqbni1#
假设您使用的是Qt的网络API,则不需要使用多线程,原因是Qt的API是围绕非阻塞事件循环模型设计的,因此预计任何函数调用所花费的时间都不会超过可以忽略的时间量(例如,几毫秒)返回,在此之后,主线程的QEventLoop恢复执行,并且因此可以及时地处理其它任务,所有这些都来自单个线程。也就是说,Qt API中有几个可选方法 * 是 * 阻塞的,在单线程应用程序中,调用这些方法可能会使应用程序对幸运的是,这些方法不是必需的,而且它们有明确的文档记录。我建议避免使用它们,因为在Qt中总是有更好的、非阻塞的方法来实现相同的结果,例如通过将适当的信号连接到适当的时隙。总而言之:线程在基于Qt的网络中是不必要的,如果不使用线程,程序将更简单、更可靠、更易于调试。您可能想看看这个示例程序以了解如何使用它。
1条答案
按热度按时间xiozqbni1#
假设您使用的是Qt的网络API,则不需要使用多线程,原因是Qt的API是围绕非阻塞事件循环模型设计的,因此预计任何函数调用所花费的时间都不会超过可以忽略的时间量(例如,几毫秒)返回,在此之后,主线程的QEventLoop恢复执行,并且因此可以及时地处理其它任务,所有这些都来自单个线程。
也就是说,Qt API中有几个可选方法 * 是 * 阻塞的,在单线程应用程序中,调用这些方法可能会使应用程序对幸运的是,这些方法不是必需的,而且它们有明确的文档记录。我建议避免使用它们,因为在Qt中总是有更好的、非阻塞的方法来实现相同的结果,例如通过将适当的信号连接到适当的时隙。
总而言之:线程在基于Qt的网络中是不必要的,如果不使用线程,程序将更简单、更可靠、更易于调试。您可能想看看这个示例程序以了解如何使用它。