CSocket类与多线程

tomorrowdreamer 2000-07-11 01:24:00
在我的应用中我想在一个单独的线程中使用csocket来负责接收数据,我听说csocket使用了隐藏窗口,因为工作者线程没有消息循环,是不是csocket就不能用在工作者线程中?
如果我使用一个ui线程,ui线程能不能没有主窗口,还是一定要使用一个隐藏的主窗口?
监听、连接是在另外的线程中完成的。监听线程在建立新的连接后,由接收线程接收数据,采用向接收线程PostMessage消息来传递新连接的套接字句柄,在接收线程中再obj.attach(sockethandle),是否是一种好办法?
谢谢各位!
...全文
461 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
meifen 2001-07-13
  • 打赏
  • 举报
回复
4
Sunlet 2000-08-28
  • 打赏
  • 举报
回复
我认为你的想法不错.以前我就想这样做:把接收线程放在单独的线程里,但是一直没有找到合适的方法.
我后来是这样实现的:主线程负责监听,连接,当有OnReceive事件发生时,把接收线程的指针传给子线程(我用的是工作者线程,自己组织了一个消息循环,直接受主线程发的消息).希望你能评价一下我的做法.

tomorrowdreamer 2000-08-28
  • 打赏
  • 举报
回复
完成端口具有那些优点?不知哪有完成端口的学习材料.请指教
tomorrowdreamer 2000-08-28
  • 打赏
  • 举报
回复
csocket采用了消息帮的机制,我觉得peekmessage-translatemessage从逻辑上讲是不严密的.最明显的例子是在试图accept时,命令按纽还起作用!所以我觉得还是把通信线程,与用户打交道的线程分开比较好.甚至各通信县城也分开.
请各位大虾指教!
alstamania 2000-08-28
  • 打赏
  • 举报
回复
我作的SOCKET程序都是用的WINSOCK2,因为CSOCKET在底层的IO模型用了AsyncSelect模式(比较讨厌,限制较多)。其实用WINSOCK2做程序也不是很复杂。比如对于你的接受发送机制就没有必要单独开线程。有一个很好用的IO模型“CompletePort”(完成端口模式)就很好用,根本就不需要什么窗口用来接收消息。要知道,IIS就是基于这样的模型开发的!另外,CSOCKET会丢数据(信不信由你)。
坎坷的菜贩 2000-08-25
  • 打赏
  • 举报
回复
同意。CSocket原来的机制不是挺好么?你只需分别为监听和连接建立CSocket对象即可了,为什么一定要用两个线程分别来监听和连接呢?搞不懂
Kevin_qing 2000-08-25
  • 打赏
  • 举报
回复
是每个接收线程接收一个连接的数据
,用api方式我觉得更为清楚
tomorrowdreamer 2000-08-25
  • 打赏
  • 举报
回复
难道得回到api老路?
casyncsocket,csocket设计得并不好?
请各位大虾继续关注这个问题
tomorrowdreamer 2000-07-12
  • 打赏
  • 举报
回复
天啦,这可麻烦了!监听线程和接收线程该如何分工呢?我的想法是监听线程负责监听、连接,接收线程负责接收数据。如果有十个连接的话,接收线程要接收十个连接的数据?
Pizza 2000-07-12
  • 打赏
  • 举报
回复
隐藏窗口不是你创建的,而是MFC创建的。用Spy++看看线程信息就知道了。
按照MSDN中做说的,如果你使用CWinThread类,那么Attach一定要在
InitInstance中进行,实际实验也是这样,否则Socket窗口不能创建,
那么你的多线程也就没有意义了,更严重情况是会在如Close操作的出现
错误。如果你使用API起线程我想Socket句柄还是作为参数传进去比较好。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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