CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

这问题难道没人能回答?!

楼主Barbarian(野蛮人)2000-09-07 09:31:00 在 Delphi / VCL组件开发及应用 提问

通常在长时间处理过程中,我们可以定期地调用Application.ProcessMessages来实现  
  界面刷新,但现在我遇到一个问题:在三层结构中,客户端程序依次调用异地DCOM服务器上的一系列函数,而这些函数的处理时间均比较长,我不知该如何处理客户端界面的刷新,在此特向各位大虾求教。   问题点数:50、回复次数:9Top

1 楼c1005(陈一蛟)回复于 2000-09-07 09:58:00 得分 5

      你只需要在COM   Server   上的方法中的相应的位置上加上Application.ProcessMessages;语句就能够如何处理客户端界面的刷新Top

2 楼playpcgame(修罗王)回复于 2000-09-07 09:58:00 得分 0

见服务器端的函数进行分拆,减少执行时间Top

3 楼playpcgame(修罗王)回复于 2000-09-07 09:58:00 得分 5

将服务器端的函数进行分拆,减少执行时间Top

4 楼Barbarian(野蛮人)回复于 2000-09-07 11:08:00 得分 0

很感激playpcgame和c1005两位的回答,但在DCOM   server上执行Application.ProcessMessages的方法我也曾试过,好像只能处理服务器本身的刷新,对客户端的刷新却无能为力,至于将服务器端的函数分拆固然是个不错的主意,但对我却无多大意义,因为  
  我这里的具体处理流程是这样的:客户端从本地局域网上的数据库服务器上取得若干数据集,然后将每个数据集分别以data的形式发送给异地应用服务器,应用服务器再将收到的data进行处理,即取出data中的每条记录,将记录的每个字段读出,作为参数传递给另一数据库服务器上的存储过程,然后执行存储过程.这个流程如果一变,将给我增加很多工作量,因此不到万不得已是不会  
  去改变这基本流程的。Top

5 楼Sayhigh(fuck)回复于 2000-09-07 14:51:00 得分 5

用线程处理.Top

6 楼JGTM2000(铁马小子)回复于 2000-09-08 00:37:00 得分 5

Sayhigh   is   all   right.   Use   a   UI   thread   to   handle   such   situation.   Be   careful   to   match   the   threading   model   of   the   COM   components   you   are   calling,   or   you   will   get   serious   performance   trouble.Top

7 楼iforever(iforever)回复于 2000-09-08 09:33:00 得分 5

我不知道你说的那些和客户端刷新有什么联系.  
   
  你做的这些事我也做过.  
   
  把你的刷新任务讲清楚些.  
   
  你的问题并没有讲清楚  
   
  是需要定期实时刷新速度太满.  
   
  还是手工刷新太慢  
  Top

8 楼c1005(陈一蛟)回复于 2000-09-08 11:06:00 得分 25

        会不会使用COM   的   Callback   编程模式,如果会的话,可在应用服务器再将收到的data进行处理,即取出data中的每条记录,将记录的每个字段读出,作为参数传递给另一数据库服务器上的存储过程,然后执行存储过程时这段业务过程中加上相应调用回调方法,在回调方法应有Application.ProcessMessages语句,这样就可以将应用服务器的处理进度反馈给客户端,且Application.ProcessMessages语句的目的就是处理客户端界面的刷新。  
          Callback   编程方法就是在应用服务器上新增一个接口,在定义相应的方法,然后在客户端采用接口对象的方式实现此接口,例如:  
  客户端:  
      TClientCallback   =   class(TAutoIntfObject,   IClientCallback(应用服务器上的接口))  
      protected  
          procedure   Progress(param1:   类型);   safecall;  
      end;  
  procedure   TFrmClient.FormCreate(Sender:   TObject);  
  var  
      typelib:   ITypeLib;  
  begin  
      OleCheck(LoadRegTypeLib(LIBID_CallbackServer,   1,   0,   0,   typelib));  
      FClientCallback   :=   TClientCallback.Create(typelib,   IClientCallback);  
  end;  
  procedure   TFrmClient。BtnServerClient(Sender:   TObject);  
  begin  
      MDCOMConnection1.AppServer.Refresh(FClientCallback);  
  end;  
   
  Server   端:  
  procedure   TServer.Refresh(FClientCallback   :OleVariant);  
  begin  
      OleVariant(IDispatch(FClientCallback)).Progress(参数);  
      ...  
  end;Top

9 楼tms2000(海天)回复于 2000-09-13 17:08:00 得分 0

 
  old=Now;  
  Repeat  
  Application.ProcessMessages;  
  Until   Now>Old+Num*   1/24/60/60  
  Top

相关问题

  • 难道就没有人能够回答了吗?我给150分
  • 没有人回答我么?难道大家都不会么?
  • 难道没人能回答这简单的MFC?
  • 难道没人愿意回答GCC这个问题吗?
  • 难道没人能回答这三个问题?!
  • 难道CSDN上就没有人能回答这个问题吗?
  • 难道CSDN上就没有人能回答这个问题吗?
  • 难道CSDN上就没有人能回答这个问题吗?
  • 难道CSDN上就没有人能回答这个问题吗?
  • 难道CSDN上就没有人能回答这个问题吗?

关键词

  • 应用服务器
  • 客户
  • 服务器
  • 存储过程
  • 函数
  • 语句
  • 界面
  • 接口
  • 数据库
  • 流程

得分解答快速导航

  • 帖主:Barbarian
  • c1005
  • playpcgame
  • Sayhigh
  • JGTM2000
  • iforever
  • c1005

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo