点击最小化或最大化旋钮不松开,为什么线程停止了
点击最小化或最大化按钮不松开,为什么线程停止了?
点击最小化或最大化按钮不松开,为什么线程停止了?
具体程序如下,线程1用于在FORM上写数字,线程2用于在IMAGE上写数字,程序运行时把鼠标放在窗体的最大化或最小化按钮上,点击一下鼠标左键但不要松开鼠标左键,此时FORM上写的数字还在继续走动,而image上写的数字竟然停下来了,这是为什么?如何避免这种情况出现?当鼠标点击按钮并不松开时,如何让程序继续运行而不受影响呢?
--------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
btn1: TButton;
lbl1: TLabel;
img1: TImage;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TMyThread1 = class(TThread)
protected
procedure Execute; override;
end;
type
TMyThread2 = class(TThread)
private
FValue:integer;
protected
procedure Execute; override;
procedure MyVCLAction;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TMyThread1.Execute;
var
i: Integer;
begin
FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
for i := 0 to 500000 do
begin
Form1.Canvas.Lock;
Form1.Canvas.TextOut(10, 10, IntToStr(i));
Form1.Canvas.Unlock;
end;
end;
procedure TMyThread2.Execute;
var
i: Integer;
begin
FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
for i := 0 to 500000 do
begin
FValue := i;
Synchronize(MyVCLAction);
end;
end;
procedure TMyThread2.MyVCLAction;
begin
Form1.img1.Canvas.TextOut(10, 10, IntTostr(FVAlue));
end;
procedure TForm1.btn1Click(Sender: TObject);
var
ID: THandle;
begin
TMyThread1.Create(False);
TMyThread2.Create(False);
end;
点击最小化或最大化按钮不松开,为什么线程停止了?
具体程序如下,线程1用于在FORM上写数字,线程2用于在IMAGE上写数字,程序运行时把鼠标放在窗体的最大化或最小化按钮上,点击一下鼠标左键但不要松开鼠标左键,此时FORM上写的数字还在继续走动,而image上写的数字竟然停下来了,这是为什么?如何避免这种情况出现?当鼠标点击按钮并不松开时,如何让程序继续运行而不受影响呢?
--------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
btn1: TButton;
lbl1: TLabel;
img1: TImage;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TMyThread1 = class(TThread)
protected
procedure Execute; override;
end;
type
TMyThread2 = class(TThread)
private
FValue:integer;
protected
procedure Execute; override;
procedure MyVCLAction;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TMyThread1.Execute;
var
i: Integer;
begin
FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
for i := 0 to 500000 do
begin
Form1.Canvas.Lock;
Form1.Canvas.TextOut(10, 10, IntToStr(i));
Form1.Canvas.Unlock;
end;
end;
procedure TMyThread2.Execute;
var
i: Integer;
begin
FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}
for i := 0 to 500000 do
begin
FValue := i;
Synchronize(MyVCLAction);
end;
end;
procedure TMyThread2.MyVCLAction;
begin
Form1.img1.Canvas.TextOut(10, 10, IntTostr(FVAlue));
end;
procedure TForm1.btn1Click(Sender: TObject);
var
ID: THandle;
begin
TMyThread1.Create(False);
TMyThread2.Create(False);
end;