社区
进程/线程/DLL
帖子详情
UI线程与工作线程
lodemenwwwww
2011-02-05 02:10:20
我当初创建了两个工作线程,里面都有一个socket用来发消息。但是发现收到的信息不知道是哪个socket发的
后来有人和我说用UI线程,然后和socket绑定
现在绑定了但是我不知道如何把原来工作线程中的函数应该放在UI线程的什么地方
如何让UI线程一边不断给服务器发消息,一边接收到服务器返回来的信息呢?
工作线程里德那个循环函数应该放到UI线程的什么地方?
...全文
204
19
打赏
收藏
UI线程与工作线程
我当初创建了两个工作线程,里面都有一个socket用来发消息。但是发现收到的信息不知道是哪个socket发的 后来有人和我说用UI线程,然后和socket绑定 现在绑定了但是我不知道如何把原来工作线程中的函数应该放在UI线程的什么地方 如何让UI线程一边不断给服务器发消息,一边接收到服务器返回来的信息呢? 工作线程里德那个循环函数应该放到UI线程的什么地方?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
每一个连接都有一个套接字来标识
服务器返回的数据已经分配给套接字了
什么都已经做好了
你还需要自己去区分这些数据是给那个套接字的干嘛?
你只需要各自用自己的套接字来发送接收数据就好了!
写不动代码的人
2011-02-07
打赏
举报
回复
利用端口号区分 不需要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
c#Winform异步
线程
刷新
UI
使用开发工具为VS2013;.net:4.0 多
线程
异步刷新
ui
界面,实时获取任务进度并进行反馈。
Android应用程序消息处理机制
Android应用程序与传统的PC应用程序一样,都是消息驱动的。也就是说,在Android应用程序主
线程
中,所有函数都是在一个消息循环中执行的。Android应用程序其它
线程
,也可以像主
线程
一样,拥有消息循环。Android应用程序主
线程
是一个特殊的
线程
,因为它同时也是
UI
线程
以及触摸屏、键盘等输入事件处理
线程
。主
线程
对消息循环很敏感,一旦发生阻塞,就会影响
UI
的流畅度,甚至发生ANR问题。这个PPT讲Android应用程序
线程
消息循环原理,主要涉及到Handler和Looper两个类,以及根据消息循环的不同使用场景,总结出三种
线程
使用模型。掌握Android应用程序消息处理机制,有助于我们熟练地使用同步和异步编程,提高程序的运行性能
精通Android多
线程
视频教程
通过本课程的学习,让你透彻精通Android多
线程
编程,课程内容包括:1.
UI
线程
和非
UI
线程
2.使用Handler发送post请求3.使用Handler处理Message消息4.Handler、Looper、MessageQueue三者的关系5.
UI
线程
Handler和
工作
线程
Handler6.使用HandlerThread7.更新
UI
的方法8.使用AsyncTask
UI
线程
和
工作
者
线程
线程
分为
UI
线程
和
工作
者
线程
,
UI
线程
有窗口,窗口自建了消息队列,这个
UI
线程
维护“消息队列”,“消息队列”是界面
线程
和工 作者
线程
的最大区别。所以有用户界面的一般称为
UI
线程
,没有界面的称之为
工作
者
线程
,
UI
线程
因为有界面,所以系统会给它维护一 个消息队列,
工作
者
线程
就没有消息队列.
工作
者
线程
原本是没有消息队列,但是你可以强制加一个,一般只要你的
线程
中出现了GDI
Android
UI
线程
与
工作
线程
之间通信
一、Handler处理
线程
间通信 Handler主要有两个用途: 1) schedule messages and runnables to be executed as some point in the future 安排 messages 和 runnables在未来某个时刻被执行; 2)enqueue an action
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章