while(true)do 因为这是无限循环!
而且application.processmessages是通知程序处理其他的消息!
但你点正常关闭窗口时,程序会等待从button1Click返回再结束程序,
但这里明显button1click不回返回!所以程序不结束!
procedure TForm1.Button2Click(Sender: TObject);
begin
Application.Terminate;//这个试正常结束程序,所以关不掉
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
halt;//这个强制结束,所以关掉程序了!
end;
而且application.processmessages是通知程序处理其他的消息!
但你点正常关闭窗口时,程序会等待从button1Click返回再结束程序,
但这里明显button1click不回返回!所以程序不结束!
procedure TForm1.Button2Click(Sender: TObject);
begin
Application.Terminate;//这个试正常结束程序,所以关不掉
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
halt;//这个强制结束,所以关掉程序了!
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
memo1.lines.clear;
while(true)do
begin
memo1.lines.add((sender as tbutton).name;
Application.ProcessMessages;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
memo2.lines.clear;
while(true)do
begin
memo2.lines.add((sender as tbutton).name));
Application.ProcessMessages;
end;
end;
点击Button1后memo1 开始刷,,,,点击button2后memo2 开始刷,而且此时memo1停止刷了,,是不是说明button1click被强行停止了?要不为什么memo1 不动了?不管如何都应该能响应WM_CLOSE 才对啊`~~~~~~WHY ? 谢谢
我认为这个问题是:由于Delphi的VCL界面库,每次只允许一个线程
对其进行操作!这是为了同步的问题!防止界面混乱!
而你用两个无限循环对界面操作,而且都加入了application.processmessages
这个可能对于delphi的vcl库,这样的操作也是禁止的!
所以当你启动另一个的时候,前一个被强制禁止!
不知对不对!