SOCKET的句柄能否从支线程回传给主线程?怎么传

zxczxczxc 2006-10-09 09:48:41
下面都是使用MFC

问题:现在服务器有一个SOCKET是需要和客户端保持常连接,而负责通信的信道类不能直接控制该SOCKET,需要传指针或句柄,然而在这里遇到了多线程中SOCKET跨线程的安全问题,因此需要传句柄,但是线程一旦结束,这个需要保持常连接的SOCKET也会随着线程的终结而释放掉,有没有办法,在终结线程之前把这个SOCKET的句柄回传给主线程,或其他创建它的线程?



在这里说明一下,程序用的是一线一SOCKET的做法,而且用的是CSOCKET或者CASYNCSOCKET

肯定有高人会建议用IOCP或其他更高效的用法,但是问题是目前急于解决上诉问题,对于程序的结构调整根本没时间去搞,并且对于IOCP,我也查看了很多资料,无奈我是VB->VC的新手,对于VC很多驱动机制还没混熟,更别谈看示例代码,MSND我在看,但是估计对我的帮助不会突飞猛进

希望各位大大慷慨解囊,提出一些解决方案

如果有更容易明白的IOCP讲解就更好了,我甚至还不知道用IOCP要引用什么库呢
...全文
183 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxczxczxc 2006-10-09
  • 打赏
  • 举报
回复
同时有几千个连接的话,我用异步SOCK好还是多线程好?因为接收过程会需要用到阻塞
尘雨 2006-10-09
  • 打赏
  • 举报
回复
把socket的句柄传回主线程,你需要做些什么操作,如果仅仅是想知道socket的一个句柄号,那就postmessage好了
如果还想用这个socket做些什么,那最好用主线程来创建socket和管理或者把socket声明为全局数组中的元素
zxczxczxc 2006-10-09
  • 打赏
  • 举报
回复
那要定义THREAD的事件,是不是要先继承一个CWINTHREAD类,然后再去定义用户消息和映射消息函数?

另外关于线程有一个问题

我想这样实现:建一个CSOCKET,然后通过线程保持CSOCKET去接收网络消息,有消息就执行对应的ON事件函数,可以这样做吗?可以的话实现步骤是怎么样的?是不是要用一个WHILE(TRUE)去循环?
zxczxczxc 2006-10-09
  • 打赏
  • 举报
回复
CUI是什么?控制台界面?

那就是GUI的
rickerliang 2006-10-09
  • 打赏
  • 举报
回复
是postthreadmessage吧,postmessage要窗口句柄。
lz,你的程序是GUI还是CUI啊?
templarzq 2006-10-09
  • 打赏
  • 举报
回复
只要有主线程的句柄就行了。在主线程中处理这个消息就ok
templarzq 2006-10-09
  • 打赏
  • 举报
回复
发消息,postmessage
zxczxczxc 2006-10-09
  • 打赏
  • 举报
回复
另外我有个想法,可不可以在支线程中传消息给主线程或其他线程,命令其SOCKET进行ASYNCSELECT的动作?因为我需要用到网络消息切换FD_READ的可用与否

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧