UI线程与工作线程

lodemenwwwww 2011-02-05 02:10:20
我当初创建了两个工作线程,里面都有一个socket用来发消息。但是发现收到的信息不知道是哪个socket发的
后来有人和我说用UI线程,然后和socket绑定
现在绑定了但是我不知道如何把原来工作线程中的函数应该放在UI线程的什么地方
如何让UI线程一边不断给服务器发消息,一边接收到服务器返回来的信息呢?
工作线程里德那个循环函数应该放到UI线程的什么地方?
...全文
204 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyx100 2011-02-09
  • 打赏
  • 举报
回复
在发送端使用UI线程并不能达到你的目的,因为你是想在接收端知道是哪个socket发送的数据。对于接收端而言,两个socket的区别在于它们的源IP端口号-目的IP端口号的组合不同,因此你只要区分这些数据即可。
Eleven 2011-02-09
  • 打赏
  • 举报
回复
可以用端口号来区分,也可以自定义协议来区分,比如数据的前面加个标示来区分,缺点是增加了传输的数据量
superdiablo 2011-02-09
  • 打赏
  • 举报
回复
可以,但是很麻烦,需要用消息处理的方式以免阻塞线程,不推荐这样使用。
[Quote=引用 16 楼 lodemenwwwww 的回复:]
顺便问问大家,UI线程能不能完成工作线程的任务,如果可以的话,那个无限的循环应该放在什么地方?[/Quote]
lodemenwwwww 2011-02-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 superdiablo 的回复:]

每次调用recv都会传入一个参数socket,所以它收到的数据在哪个socket上其实你是知道的,所以你还想区分什么?如果真的想区分两个socket那就只有用端口号或者socket本身的句柄值了。
[/Quote]

连接服务器的时候服务器那边的IP和port都是同样的
调用recv能得到本地的port么?
lodemenwwwww 2011-02-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 superdiablo 的回复:]

客户端的Port是内核分配的一个临时端口.
当你调用Connect函数且返回成功后, 使用getsockname方法解析建立的SOCKET,可以得到本地的端口.
引用 13 楼 lodemenwwwww 的回复:
引用 11 楼 superdiablo 的回复:

每次调用recv都会传入一个参数socket,所以它收到的数据在哪个socket上其实你是知道的,所以你还想区分什么?如果……
[/Quote]

我试一下

顺便问问大家,UI线程能不能完成工作线程的任务,如果可以的话,那个无限的循环应该放在什么地方?
superdiablo 2011-02-08
  • 打赏
  • 举报
回复
客户端的Port是内核分配的一个临时端口.
当你调用Connect函数且返回成功后, 使用getsockname方法解析建立的SOCKET,可以得到本地的端口.
[Quote=引用 13 楼 lodemenwwwww 的回复:]
引用 11 楼 superdiablo 的回复:

每次调用recv都会传入一个参数socket,所以它收到的数据在哪个socket上其实你是知道的,所以你还想区分什么?如果真的想区分两个socket那就只有用端口号或者socket本身的句柄值了。


连接服务器的时候服务器那边的IP和port都是同样的
调用recv能得到本地的port么?
[/Quote]
zhengjiankang 2011-02-08
  • 打赏
  • 举报
回复
每一个连接都有一个套接字来标识
服务器返回的数据已经分配给套接字了
什么都已经做好了

你还需要自己去区分这些数据是给那个套接字的干嘛?
你只需要各自用自己的套接字来发送接收数据就好了!
  • 打赏
  • 举报
回复
利用端口号区分 不需要ui线程
superdiablo 2011-02-07
  • 打赏
  • 举报
回复
每次调用recv都会传入一个参数socket,所以它收到的数据在哪个socket上其实你是知道的,所以你还想区分什么?如果真的想区分两个socket那就只有用端口号或者socket本身的句柄值了。
lodemenwwwww 2011-02-06
  • 打赏
  • 举报
回复
再重复一下我的问题
我现在是从文件里读出一行内容然后把读出的内容通过socket发送到服务器
然后服务器给我返回一个信息

我创立了两个工作线程,每个线程里面都有一个socket
两个线程是同时运行的,现在我无法分清楚服务器返回的信息是相应哪个线程里的socket的

得到端口号这个办法好像可以行的通。

另外问一下run()这个函数怎么用
UI线程这个东西我还是不太很清楚
或者谁有这方面的例子,文档什么的给推荐点
验证码识别 2011-02-06
  • 打赏
  • 举报
回复
不懂有什么区别, up
superdiablo 2011-02-06
  • 打赏
  • 举报
回复
每个socket在连接上时你都可以记下它的端口号,你可以拿这个来区分。
[Quote=引用 6 楼 lodemenwwwww 的回复:]
引用 4 楼 superdiablo 的回复:
在发送端使用UI线程并不能达到你的目的,因为你是想在接收端知道是哪个socket发送的数据。对于接收端而言,两个socket的区别在于它们的源IP端口号-目的IP端口号的组合不同,因此你只要区分这些数据即可。


不是接收端,是我发过去,然后服务器给我返回的信息。这个我区别不了。
服务器的代码是已经开发完毕的不能动了。
所以它那边是不能给……
[/Quote]
lodemenwwwww 2011-02-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fishion 的回复:]
放到Run()里面..
想知道是哪一个socket发的,可以在数据里再定义一段数据来区别socket
[/Quote]

run是个什么东西?我菜鸟。我自己先查查。

是我发给服务器,然后服务器再发给我。
我定义一段数据没用的,服务器不会处理的

这个办法没用的。
run这个办法我再看看
lodemenwwwww 2011-02-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 superdiablo 的回复:]
在发送端使用UI线程并不能达到你的目的,因为你是想在接收端知道是哪个socket发送的数据。对于接收端而言,两个socket的区别在于它们的源IP端口号-目的IP端口号的组合不同,因此你只要区分这些数据即可。
[/Quote]

不是接收端,是我发过去,然后服务器给我返回的信息。这个我区别不了。
服务器的代码是已经开发完毕的不能动了。
所以它那边是不能给我加信息区分是哪个socket的
superdiablo 2011-02-05
  • 打赏
  • 举报
回复
在发送端使用UI线程并不能达到你的目的,因为你是想在接收端知道是哪个socket发送的数据。对于接收端而言,两个socket的区别在于它们的源IP端口号-目的IP端口号的组合不同,因此你只要区分这些数据即可。
fishion 2011-02-05
  • 打赏
  • 举报
回复
放到Run()里面..
想知道是哪一个socket发的,可以在数据里再定义一段数据来区别socket

15,471

社区成员

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

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