Application.Run时系统作了些什么?(100分)

  • 主题发起人 主题发起人 heping
  • 开始时间 开始时间
H

heping

Unregistered / Unconfirmed
GUEST, unregistred user!
程序启动时,有点慢,我用单步执行,
感觉,主要的时间是花在:最后一步上:
就是:Application.Run;
请教:Application.Run时,系统作了哪些工作?
另:是不是:程序的USES单元中,引用了太多的文件,
造成上述现象的?
请指点一二。谢谢。
 
个人认为与Application.Run没多大关系,
是不是一开始创建了N个窗体了,打开了N个数据库查询?
 
显示主窗口,进入消息处理循环。没有该句程序就退出了。
 
执行 options-forms-autocreate froms列表框内的 .create事件。
呵呵,不知这样的理解对不对?
 
绝对不是Application.Run语句的问题,
你单步运行一下,可能出现在的问题在Application.Run前的那条语句
 
有些窗体不需要自动创建,而是调用前动态创建,还有数据表也可以在程序运行中需要时才动态打开,
这样可以节省APPLICATION.RUN的运行时间
 
我们看一下Delphi的代码,各个步骤的含义我已经注明:
procedure TApplication.Run;
begin
FRunning := True;
try
//填写指针,不会费时间
AddExitProc(DoneApplication);
if FMainForm <> nil then
begin
//设置状态,不会费时间
case CmdShow of
SW_SHOWMINNOACTIVE: FMainForm.FWindowState := wsMinimized;
SW_SHOWMAXIMIZED: MainForm.WindowState := wsMaximized;
end;
//设置状态,不费时间
if FShowMainForm then
if FMainForm.FWindowState = wsMinimized then
Minimize else
FMainForm.Visible := True;
repeat
//有可能处理各种消息
HandleMessage
until Terminated;
end;
finally
FRunning := False;
end;
end;


主要费时间的地方在HandleMessage上,想想看是什么消息占用了时间就知道了,可以使用工具捕获消息
 
我单步运行,在Application.Run前的那条语句出现问题,但那一句是form.show
为什么不能show
是不是Application问题
 
其实你不用运行功能,直接按F8或F7跟踪就可以知道它会执行什么代码,一清二楚
 
你是新建窗体时用的frame,form.show就会出错,看看是不是建窗体里搞错了
 
帮忙看看,问题,可能在哪?
下面是程序的代码:
Begin
//构造封面
Form_flash := TForm_flash.Create(Application);
Form_flash.Show;
Form_flash.Update;
//初始化主程序
Application.Initialize;
Application.Title := '软件管理系统;
//数据模板
Application.CreateForm(TDataModule1, DataModule1);
//主窗口
Application.CreateForm(TForm_main_123, Form_main_123);
//明细(一个子窗口)
Application.CreateForm(TForm_mx, Form_mx);
//查询(一个子窗口)
Application.CreateForm(TForm_cxsj, Form_cxsj);
//释放封面
Form_flash.Hide;
Form_flash.Free;
//运行主程序
Application.Run;
end.
 
请教:
有什么工具,可以捕获消息?
谢谢。
 
如下试一下:
帮忙看看,问题,可能在哪?
下面是程序的代码:
Begin
//初始化主程序
Application.Initialize;
Application.Title := '软件管理系统;
//构造封面
Form_flash := TForm_flash.Create(Application);
Form_flash.Show;
Form_flash.Update;
//主窗口
Application.CreateForm(TForm_main_123, Form_main_123);
//数据模板
Application.CreateForm(TDataModule1, DataModule1);
//明细(一个子窗口)
Application.CreateForm(TForm_mx, Form_mx);
//查询(一个子窗口)
Application.CreateForm(TForm_cxsj, Form_cxsj);
//释放封面
Form_flash.Hide;
Form_flash.Free;
//运行主程序
Application.Run;
end.
 
请教,这样,交换一下,有关系么?
 
Application.Run就是个消息循环啊,主要任务就是在这里
接收,派发消息。
repeat
HandleMessage
until Terminated;
你的程序的大部分时间都在这里了.
慢不是这里的原因。
 
多人接受答案了。
 
后退
顶部