递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 5461|回复: 8
打印 上一主题 下一主题

[视窗] HP客户端怎么将异步请求变同步?

[复制链接]

91

主题

490

帖子

2059

积分

金牌会员

免费版体验专员

Rank: 6Rank: 6

积分
2059
跳转到指定楼层
楼主
发表于 2022-2-6 14:21:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
客户端发送数据后,等待数据或者超时后执行下一步。服务器必须异步,但是客户端这边要变成同步,发送请求后加个循环吗?这样好像占cpu啊,有什么好方法吗?

非主流编程软件/非官方指定的/非正式版体验专员
回复

使用道具 举报

43

主题

313

帖子

3600

积分

论坛元老

Rank: 8Rank: 8

积分
3600
沙发
发表于 2022-2-6 20:18:56 | 只看该作者
服务端回了数据,发送数据再返回啊,这个过程可以用事件来进行同步,发送完数据就进入等待,接收到服务端回的消息后,就结束等待
回复

使用道具 举报

91

主题

490

帖子

2059

积分

金牌会员

免费版体验专员

Rank: 6Rank: 6

积分
2059
板凳
 楼主| 发表于 2022-2-6 20:50:53 | 只看该作者
fengshangren 发表于 2022-2-6 20:18
服务端回了数据,发送数据再返回啊,这个过程可以用事件来进行同步,发送完数据就进入等待,接收到服务端回 ...

我就是想知道这个等待怎么处理。
比如
方法A()
{
       客户端发送数据方法(.....)  //这里需要得到HP服务器返回的数据后才能下一步,而不是发送数据后
       执行方法B(....)
       执行方法C(....)
}

客户端发送数据方法()
{
       HP客户端发送数据(.....)
      等待服务器返回。。。。。这里该怎么处理?加个判断循环,取得数据后跳出循环吗?
}

我就是想知道如何等待不占CPU

非主流编程软件/非官方指定的/非正式版体验专员
回复

使用道具 举报

91

主题

490

帖子

2059

积分

金牌会员

免费版体验专员

Rank: 6Rank: 6

积分
2059
地板
 楼主| 发表于 2022-2-6 21:11:56 | 只看该作者
本帖最后由 Fang0x378 于 2022-2-6 21:13 编辑

如果用信号灯等待的话,等待10秒,这10秒里程序是无响应状态。用判断循环等待的话,好像也会占cpu,程序也会卡住10秒
不知道专业人员怎么处理的


非主流编程软件/非官方指定的/非正式版体验专员
回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40535
5#
发表于 2022-2-7 08:52:44 | 只看该作者
为什么一定要同步等待呢。。就在事件里面执行接下来的方法就行了。。

写程序就是要思维扩展开,如果这个问题不能解决,难道就一直卡着不动了??

尽管通过事件操作,可能有一点点不方便,比如一些变量数据引用不方便,但是最起码问题解决了。。

安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

15

主题

156

帖子

1816

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1816
6#
发表于 2022-2-7 09:29:20 | 只看该作者
试试完成端口···
回复

使用道具 举报

91

主题

490

帖子

2059

积分

金牌会员

免费版体验专员

Rank: 6Rank: 6

积分
2059
7#
 楼主| 发表于 2022-2-7 15:22:02 来自手机 | 只看该作者
本帖最后由 Fang0x378 于 2022-2-7 15:34 编辑
创世魂 发表于 2022-2-7 08:52
为什么一定要同步等待呢。。就在事件里面执行接下来的方法就行了。。

写程序就是要思维扩展开,如果这个问 ...

我主要是想封装一个数据库中间件。
客户端这边中间件数据库执行sql之后,调用方要能执行后马上取到记录集,如果不能变成同步的话,这个封装就没有意义了。
我的软件是CS架构,C端cha询数据库是发送一个自定义命令头给S端,S端执行cha询后把结果返回给C端。比如要cha询个人信息,那我就发送命令“cha询个人信息”到S端,S端和C端需要来回定义命令头,一端指令结构有改动,另一端也需要改动,重复的工作量太大了。如果有中间件,我可以直接在C端编写sql语句,省去了大量工作。

回复

使用道具 举报

91

主题

490

帖子

2059

积分

金牌会员

免费版体验专员

Rank: 6Rank: 6

积分
2059
8#
 楼主| 发表于 2022-2-7 15:35:08 | 只看该作者

怎么理解?
非主流编程软件/非官方指定的/非正式版体验专员
回复

使用道具 举报

15

主题

156

帖子

1816

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
1816
9#
发表于 2022-2-7 15:59:49 | 只看该作者

最简单的办法,循环中间加个延时(1) 一直判断~完成端口也是让你等待线程阻塞但是不占CPU,等你收到数据了,在异步事件里去触发下那个端口句柄,这样等待状态就变成触发状态了··火山PC里信号灯啊同步事件啊都行,我个人感觉完成端口开销最小,也许不对,你多看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-25 05:43 , Processed in 0.091372 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表