
请教编程高手-关于DELPHI主线程
在接触多线程编程后我反过来想到,DELPHI的主线程是怎么工作的__在窗体建立后,主线程是进入了一个和子线程类似的whilenotterminated循环或是把自己挂起了...
在接触多线程编程后我反过来想到,DELPHI的主线程是怎么工作的__
在窗体建立后,主线程是进入了一个和子线程类似的
while not terminated循环或是把自己挂起了,或是在其他什么状态?
它是怎么对消息队列或者APC队列做出反应的?
谢谢楼下的回答,我去看了下,看到IDLE(message)就无法更深入了,能大概知道这个idle()在干什么吗? 展开
在窗体建立后,主线程是进入了一个和子线程类似的
while not terminated循环或是把自己挂起了,或是在其他什么状态?
它是怎么对消息队列或者APC队列做出反应的?
谢谢楼下的回答,我去看了下,看到IDLE(message)就无法更深入了,能大概知道这个idle()在干什么吗? 展开
1个回答
展开全部
主线程程始终是在执行一个消息处理循环代码的,一个应用程序主线程是通过
Application.Run过程启动的, 楼主打开Application.Run实现过程可以看到具体实现:
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 //---->>消息循环开始
try
HandleMessage; // 此过程又是调用ProcessMessage,如果消息队列中没有消息,则进入空闲状态 Idle(Msg);
except
HandleException(Self);
end;
until Terminated;
end;
finally
FRunning := False;
end;
end;
Application.Run过程启动的, 楼主打开Application.Run实现过程可以看到具体实现:
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 //---->>消息循环开始
try
HandleMessage; // 此过程又是调用ProcessMessage,如果消息队列中没有消息,则进入空闲状态 Idle(Msg);
except
HandleException(Self);
end;
until Terminated;
end;
finally
FRunning := False;
end;
end;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询