如何才能改进我的程序???!!(100分)

  • 主题发起人 主题发起人 chy.com
  • 开始时间 开始时间
C

chy.com

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序是一个顺序访问多个页面的简单程序,但是在运行是窗口不能拖动,窗口覆盖後也不能重画,请问这是为是么???系统占用率并不高,
而且运行当中任务管理器里看程序是未响应状态!

请问如何才能改进???
 
是不是一个透明界面啊。基本思路大概应该看看消息有没有到达应该到达的地方。
 
应该不是透明界面问题。
是不是你的程序没有运行结束?
譬如,你点击了一个按钮后,这个按钮的事件没有结束?
在按钮事件没有结束前,窗体是不响应的。
如果你的程序中涉及比较耗时的循环,最好在里面加上消息处理程序,如:
Application.Processmessage
或者
Application.HandleMessage等。
 
yzhshi,能不能说的再详细一些?!
 
也就是你的程序是单线程的,而且在这个线程中,你的程序是进行一个比较耗时的循环。如果是这样,那你可以在这个循环中加入Application.ProcessMessages来进行消息的处理。比如响应鼠标的操作或刷新页面等等。如果你的程序有不在循环之中的耗时操作,那最好用多线程。
 
我想,不应该是 yzhshi 再详细一点,而是你应该再详细点。比如代码片段、程序逻辑等。
 
List:=TStringList.Create;
try
List.LoadFromFile('conf.txt');
for i:=0 to List.Count-1 do
begin
if Flag=0 then
begin
Memo1.Lines.Add('[开始更新');
Memo1.Lines.Add(List);
Memo1.Lines.Add('请稍候......]');
// Memo1.Lines.Add('');
IdHTTP1.Get(List);
// sleep(30000);
end;
if (i=List.Count-1) then
begin
Flag:=1;
Memo1.Lines.Add('###########更新结束!###########')
end;
end;
finally
List.Free;
end;


我加了Application.Processmessage 没作用啊!
 
IdHTTP1.Get 的时候,你的程序是进入了另外一个线程,也就是 IdHTTP1 控件的 Get 线程,
没有太好的办法把它从自己的线程拉出来,但你可以尝试看看有没有 Timeout 属性,如果
没有,这个控件在 socket 连接中会等待很长时间而不返回,这时候就需要另启动一个 Timer
控制线程对这个连接进行超时检测,发现超时就杀死这个 Get 线程。当然也可以尝试接收
状态消息,但如果 Get 线程被 Socket 拖住,连状态消息都不能返回也是有的。呵呵,这
就是使用现成控件带来的麻烦。没办法。
 
程序陷在
IdHTTP1.Get(List);
出不来了,
要是不改这函数里面,
或者你弄个 模态的对话框 上面放个进度条什么的,告诉用户 '你等等,我忙着那',呵呵
解决不了问题就规避问题吧,呵呵
 
办法也是有,但不是一句话能说明的。呵呵。
记住使用 socket 是不能希望同步的是很重要的一条。象他这样打算同步显示,在局域网
还有希望,在 internet 基本没戏。抛开了同步这个念头后,老手会动态在新线程中创建
IdHTTP1 ,使它脱离主界面运行,一直等到它返回后才显示信息。
使用 IdHTTP1 是一个简易的做法,它对网络的要求是比较苛刻的,如果不能认识这一点,
除了抱怨剩下的还是抱怨。:)
 
谢谢小雨哥及Yves,但是新创建线程好像不能写Form1.Memo吧。
 
搬个板凳来听课。。。[:D]
 
后退
顶部