CSoecket::OnReceive 接收在主线程,有什么办法移到辅线程接收
CSoecket::OnReceive 接收在主线程,
如果多个数据量大的socket,势必阻塞主线程,
有什么办法将csocket移到多个辅线程接收数据
问题点数:20、回复次数:12Top
1 楼test2002(test2002)回复于 2005-11-21 17:38:58 得分 0
难道高手如云的csdn没人会?Top
2 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-11-21 17:45:28 得分 5
数据量大的socket等,可以考虑异步IOTop
3 楼test2002(test2002)回复于 2005-11-21 17:47:00 得分 0
难道就不能用CSocket阻塞方式吗Top
4 楼test2002(test2002)回复于 2005-11-21 17:51:57 得分 0
如果不行,我觉得CSocket没有存在的必要了。
肯定会有的,希望大家继续探讨。Top
5 楼somexing(somexing)回复于 2005-11-21 17:53:14 得分 5
CSocket似乎就是封装了select吧
需要一个窗口接收FD_READ等,
可以将数据接收后投递到辅助线程处理Top
6 楼test2002(test2002)回复于 2005-11-21 17:53:16 得分 0
我觉得用PostThreadMessage会不错的效果,把主线程工作移到辅线程。Top
7 楼test2002(test2002)回复于 2005-11-21 17:56:58 得分 0
CSocket似乎就是封装了select吧
需要一个窗口接收FD_READ等,
可以将数据接收后投递到辅助线程处理
-------------------------------------》
应该这样吧,主线程只负责收消息,
并将消息投递到辅助线程吧。
由辅线程收吧,由主线程接收的话,那不是要阻塞主线程其他消息吗Top
8 楼BBirdlyh(BBird)回复于 2005-11-21 19:01:24 得分 5
不能post,速度的瓶径是在数据接受的过程上,不是在数据处理上,recv调用完后数据都接受下来了,还post干吗,CSocket的好处是在简单SOCKET处理和他与FILE的结合上,如简单的文字聊天程序.象这样的问题没必要非用CSOCKETTop
9 楼test2002(test2002)回复于 2005-11-22 08:34:30 得分 0
不能post,速度的瓶径是在数据接受的过程上,不是在数据处理上,recv调用完后数据都接受下来了,还post干吗,CSocket的好处是在简单SOCKET处理和他与FILE的结合上,如简单的文字聊天程序.象这样的问题没必要非用CSOCKET
--------------------------------------------------------
你理解错了,是在辅助线程调用recv接收,而主线程中有OnReceive消息,并将这个消息告诉辅助线程,用辅助线程接收的。
我已经测试成功了!!
现在我已经想不出为什么要用完成端口了。
我现在可以用CSocket+CWinThread轻松完成超多socket高速接收、发送的问题。
Top
10 楼test2002(test2002)回复于 2005-11-22 08:38:16 得分 0
看来csdn高手如云原来这样,这样小小问题也没搞出所以然Top
11 楼BBirdlyh(BBird)回复于 2005-11-22 19:19:07 得分 5
是啊,你还是用了线程吗,用了线程就等于用了异步,问题本来就可以这么解决的啊.但是话说回来了要是发送数据的时候呢,CSOCKET发送数据的时候不会通知ONSEND的不信你试试Top
12 楼test2002(test2002)回复于 2005-11-23 15:08:03 得分 0
是啊,你还是用了线程吗,用了线程就等于用了异步,问题本来就可以这么解决的啊.但是话说回来了要是发送数据的时候呢,CSOCKET发送数据的时候不会通知ONSEND的不信你试试
-----------------------------------------------
不用试了,肯定没有,但我把pSocket->Send ,放在了线程执行,这个时候,就是在发送数据时候,也没有阻塞主线程了。Top




