打开> 2.5k TCP端口和线程后退出流程

时间:2013-09-14 16:03:13

标签: c++ windows qt visual-c++ tcp

进程(用C ++编写)充当服务器,QTcpServer类用于构造服务器。对于每个新的传入连接,它会生成一个新线程并使用新的套接字描述符创建一个QTcpSocket对象,该对象负责该套接字上的所有读/写操作。为每个连接产生一个新线程可能听起来很糟糕,但我无法帮助,所以请耐心等待。 所以,问题是,当服务器上的套接字数量超过2500时,它会崩溃。我在控制台上收到以下消息: QEventDispatcher:无法创建QEventDispatcherWin32内部窗口:1158 Qt:INTERNALL错误:无法安装GetMessage挂钩

我尝试了一些东西,首先我检查了我们是否可以创建这么多线程,因为每个连接都有专用的线程。它没有问题,我可以创建超过5000个线程。 其次,我在MSDN找到了一些东西,http://msdn.microsoft.com/en-us/library/aa560610(v=bts.20).aspx 它也没有帮助。请建议。

2 个答案:

答案 0 :(得分:1)

每个线程的堆栈默认分配为1 MB,因此对于2500个线程,您的线程堆栈已超过进程可用的2 GB内存。对于如此多的插座,单插槽每插槽设计是站不住脚的。

答案 1 :(得分:0)

很少有东西,最初为64位平台编译可执行文件。它有助于创建大量线程。其次,使用QTcpSocket删除,并从头开始编写所有函数。我从QTcpSocket寻求的差异是包含“Winsock2.h”的方式。在包含头文件之前定义下面的宏。     #define FD_SETSIZE 5000

通过这些更改,服务器可以同时处理> 5K请求,并且CPU使用率也不多。