首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

QThreadPool与TCP服务器有关问题

2012-02-07 
QThreadPool与TCP服务器问题我要构建一个TCP服务器,长时连接。可能要处理3000个左右的连接。现在的方法是使

QThreadPool与TCP服务器问题
我要构建一个TCP服务器,长时连接。可能要处理3000个左右的连接。
现在的方法是使用一线程管理一个连接,但这样不好。3000个连接我不是要用3000个线程吗?!
并且很多时候这些线程都是阻塞状态。于是想到用线程池。
看了下QT的QThreadPool和QRunnable,结果问题大条了——QRunnable不是继承QObject类,也就是说没有eventloop。
而这篇文章http://developer.qt.nokia.com/wiki/ThreadsEventsQObjects悲催到提供的方法只有一句话

you have to code that by hand, using low-level threading primitives (like a mutex-guarded queue for collecting results, etc.).

请问大家是怎么解决这个问题的?

[解决办法]
使用线程池可以减少创建线程的时间代价,但这和网络通讯没有太多必然的联系。

我认为没有特别的必要,在线程中的网络通讯还是使用阻塞式的比较好。

关于你说的这个问题,应该属于高并发的范畴。很遗憾的说,Qt没有提供高并发的支持。QTcpSocket还是使用轮询的方式。

想解决这个问题,可以和本地的API进行混编。在Win32下使用“完成端口”,在Linux下可以使用EPOLL
[解决办法]
QT线程部分是incomplete的。。。涉及到线程的东西还是用win32 api或者boost比较好。

热点排行