关于主线程与消息在时间上分配的问题。 ( 积分: 50 )

  • 主题发起人 主题发起人 labixiaoxin
  • 开始时间 开始时间
L

labixiaoxin

Unregistered / Unconfirmed
GUEST, unregistred user!
有几个概念性问题:
在一个程序中只有这么一段代码:
procedure TForm1.Button1Click(Sender: TObject);
var
i,jinteger;
begin
for i := 1 to 1000000000 do

j := i;
end;
1、个程序中,所谓的主线程是一个什么东西,在我们按下BUTTON1前,它在做什么?
2、我拉按下BUTTON1会生成一个消息,消息被系统响应后会开始执行里面的一个长循环,执行这个循环的过程是属于在主线程中执行的还是在另一个线程中执行的(我并没有建立一个别的线程)?或者说是主线程在执行过程中被打断,中间被插上这个长循环的过程吗?主线程与这个长循环在时间上怎么分配?
3、若我把上面那个长循环的地方(或主线程中)换成WaitForSingleObject(*,10000)来等待*事件的发生,那么在这个等待10秒的过程中,系统还能响应其它消息(或做其它事如处理其它按键的代码)吗(这里可没有用到application.ProcessMessages;)?
 
有几个概念性问题:
在一个程序中只有这么一段代码:
procedure TForm1.Button1Click(Sender: TObject);
var
i,jinteger;
begin
for i := 1 to 1000000000 do

j := i;
end;
1、个程序中,所谓的主线程是一个什么东西,在我们按下BUTTON1前,它在做什么?
2、我拉按下BUTTON1会生成一个消息,消息被系统响应后会开始执行里面的一个长循环,执行这个循环的过程是属于在主线程中执行的还是在另一个线程中执行的(我并没有建立一个别的线程)?或者说是主线程在执行过程中被打断,中间被插上这个长循环的过程吗?主线程与这个长循环在时间上怎么分配?
3、若我把上面那个长循环的地方(或主线程中)换成WaitForSingleObject(*,10000)来等待*事件的发生,那么在这个等待10秒的过程中,系统还能响应其它消息(或做其它事如处理其它按键的代码)吗(这里可没有用到application.ProcessMessages;)?
 
1、在Win32中,进程是管理线程的,在Delphi程序中,默认存在一个线程,它就是主线程,如果你没有另外创建线程,那么整个应用自始至终基本上只存在一个线程。在按下Button1前,它在等待消息。
2、这个循环是在主线程中执行的,如果循环没有结束,程序将处理无响应状态。
3、在这10秒中,系统不能响应其它消息
 
相互学习一下。
1,在没有按的时候,想都不用想,肯定是在执行一个消息循环。
application.run相当于
while(有没有退出信息)
begin
解释消息;
传递消息;
end;
2,当你按了button之后,这个消息被解释成WM_LBUTTONDOWN,然后由‘消息传递’函数传递给WNDPROC过程,在WNDPROC中,执行与WM_LBUTTONDOWN相对应该的程序代码,也就是你的for循环,这时候消息循环将不在获得执行,除非for循环结束。(试试关闭窗体,肯定关不了的)
对多线程我不是太了解,但有一点是肯定的,CPU某一时刻,只能执行一条语句。用多线程,只能提高cpu的执行效率,但不会提高cpu的运行速度。
 
后退
顶部