这样的应用可以实现吗?关于通信和多线程的。

henghao 2003-11-25 06:30:49
背景:一函数M,功能是向远程socket server发送一请求包,等收到server的返回包时,从中解析出信息后返回,调用它的函数可能会把收到的信息打到界面上或写入数据库中,或什么的,那我就不管了,我就负责实现这个函数。函数用户大概会这样用我的函数M:
while(has_data())
{
gen_para(&c); //准备请求参数;
char *temp = M(c);
use_data(temp); //使用收到的信息
}

问题:发现此函数从发出请求到收到返回包平均需要100多毫秒,也就是说,每秒平均能从server得到10次信息,这不能满足高峰期瞬时通信量的需要。不过,经分析发现,server端从收到请求包到发返回包所用的时间极短(只几个毫秒),因此判断大量时间耗费在数据包的网络慢游上了。
  回忆起网络课上老师讲滑动窗口流量控制时说过,这种情况提高通信效率的办法是客户端不停的发请求而不等回复,最好发到把信道塞满,这样服务端取第一个请求,处理,发回复后,正好第二个请求也到了,两样处理完后,每三个请求也到了...,这样当请求数无穷多时,实际上信息交换的速度等于server产生回复的速度,那是相当令人满意的速度了。

  但是,几经考虑还是不知这种东西如何实现,不知高手们有何高见?感觉是要用多线程,开上一堆线程,让它们等回复不就行了。可是M函数要等到子线程收到回复才有东西返回给调用它的函数啊,也就是说M要等子线程收到回复才能返回,哎,不对,怎么又绕回问题起点了?不是为了不等回复呢才开的多线程吗,怎么又等上了?这怎么能提高效率呢?!
...全文
51 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
pp616 2003-11-25
  • 打赏
  • 举报
回复
可以利用消息来返回数据,或是用回调函数。
用消息。
你提供别人一个函数。参数中包含一个接收反馈数据消息的窗口句柄。
如bool myFunction(HANDLE m_hwnd);
该函数只返回一个bool,告诉调用者该函数是否调用成功。
然后你进入你的多线程的网络通讯工作。当收到数据后把数据缓冲区的指针用SendMessage发送给那个m_hwnd,对方响应你的消息然后来处理你给它的数据。你等SendMessage函数返回就是它已经把数据处理完了。然后该释放释就放该重初始化就重初始化,等待下一个数据包的到来。
或是用类似CallBack
调用你的函数时传一个函数指针给你。你收到数据后直接去调用它给你的函数指针来处理收到的数据。

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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