递归火山软件开发平台

标题: HP客户端怎么将异步请求变同步? [打印本页]

作者: Fang0x378    时间: 2022-2-6 14:21
标题: HP客户端怎么将异步请求变同步?
客户端发送数据后,等待数据或者超时后执行下一步。服务器必须异步,但是客户端这边要变成同步,发送请求后加个循环吗?这样好像占cpu啊,有什么好方法吗?


作者: fengshangren    时间: 2022-2-6 20:18
服务端回了数据,发送数据再返回啊,这个过程可以用事件来进行同步,发送完数据就进入等待,接收到服务端回的消息后,就结束等待
作者: Fang0x378    时间: 2022-2-6 20:50
fengshangren 发表于 2022-2-6 20:18
服务端回了数据,发送数据再返回啊,这个过程可以用事件来进行同步,发送完数据就进入等待,接收到服务端回 ...

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

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

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


作者: Fang0x378    时间: 2022-2-6 21:11
本帖最后由 Fang0x378 于 2022-2-6 21:13 编辑

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



作者: 创世魂    时间: 2022-2-7 08:52
为什么一定要同步等待呢。。就在事件里面执行接下来的方法就行了。。

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

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


作者: 小小小小鸟    时间: 2022-2-7 09:29
试试完成端口···
作者: Fang0x378    时间: 2022-2-7 15:22
本帖最后由 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语句,省去了大量工作。


作者: Fang0x378    时间: 2022-2-7 15:35
小小小小鸟 发表于 2022-2-7 09:29
试试完成端口···

怎么理解?
作者: 小小小小鸟    时间: 2022-2-7 15:59
Fang0x378 发表于 2022-2-7 15:35
怎么理解?

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




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4