多线程SOCKET通讯

iamzxx 2009-09-14 04:13:56
最近写一个SOCKET通讯的软件.
其中有一个通讯类, 该类每次实例化后, 都会创建2个线程.
这样一来, 这个类多次实例化后, 就会有2N个线程,
有什么办法, 让单个实例的2个线程互相通讯, 与其它实例的线程无关呢?
--
看了JAVA,有线程组的慨念, 哪位知道VC有同样的东西吗
...全文
165 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Qt-UI 2009-09-15
  • 打赏
  • 举报
回复
单实例内的通讯使用随机生成的端口进行通讯 新实例使用例外一对 这样多实例间就不会访问到了
stjay 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 iamzxx 的回复:]
楼上,我原来说的不够准确, 我说的类是笼统的说法, 实际是这个初始类又调用了其它的类去创建线程,有多个通讯类,如SOCKETDX,SOCKETTX,SOCKETRX.
目的是想让 这个初始类及所关联的类在实例化后进行通讯, 而不与另一次实例进行通讯.
[/Quote]

将 全局变量, 临界区 放进类里,
做成成员变量
每个实例的成员变量都互不相干的
iamzxx 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xdljf 的回复:]
通信类一般搞一个线程就摆平了吧,为什么搞两个?
[/Quote]
与一台主机相连时,一个线程是发送数据, 一个线程RECV接收数据.
与多台主机相连时, 就产生了多个实例
iamzxx 2009-09-15
  • 打赏
  • 举报
回复
谢谢各位给的思路, 本人个人感觉PostThreadMessage比较适合在界面线程中传递信息, 假如是传递2个线程间的同步信息, 会不会产生因为线程优先级,线程等待等原因, 造成同步失败?
xdljf 2009-09-14
  • 打赏
  • 举报
回复
通信类一般搞一个线程就摆平了吧,为什么搞两个?
dirdirdir3 2009-09-14
  • 打赏
  • 举报
回复
可以用主线程作为周转,主线程里面存一个数组,有这两个线程的id,需要通讯的时候发消息给主线程,并附上自己的ID,然后主线程查找后发给另外一个线程...........
iamzxx 2009-09-14
  • 打赏
  • 举报
回复
楼上,我原来说的不够准确, 我说的类是笼统的说法, 实际是这个初始类又调用了其它的类去创建线程,有多个通讯类,如SOCKETDX,SOCKETTX,SOCKETRX.
目的是想让 这个初始类及所关联的类在实例化后进行通讯, 而不与另一次实例进行通讯.
gotooker 2009-09-14
  • 打赏
  • 举报
回复
楼主,你可以照原来的思路啊,多个实例并不影响你的流程啊。
你把原来的全局变量改为类的成员变量,每个对象初始化一个临界区,不久搞定了。
iamzxx 2009-09-14
  • 打赏
  • 举报
回复
写的是工作线程, 主要是传递一些SESSION, COUNT之类的简单数据.
原本只有一个实例时,使用的是全局变量, 读写时使用临界区. 觉得简单.
多个实例的情况下就用不上了. PostThreadMessage会不会太复杂?
zhaohongbo83 2009-09-14
  • 打赏
  • 举报
回复
可以呀,每一个实例都有一个进程共享空间,在这里线程之间可以相互通信,就像LS所说的PostThreadMessage来进行通讯!
Dingnifei123 2009-09-14
  • 打赏
  • 举报
回复
帮顶,
fishion 2009-09-14
  • 打赏
  • 举报
回复
每个线程句柄都是不一样的,创建的时候保存线程句柄,再用PostThreadMessage来进行通讯

18,356

社区成员

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

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