Есть многопоточное приложение в делфи, но при запуске двух потоков одновременно, она виснет, поможете?
код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Unit2, Menus, jpeg;
type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
Image2: TImage;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Image3: TImage;
procedure Button1Click(Sender: TObject);
procedure ThreadPaint(c:Tcanvas);
procedure paint1;
procedure paint2;
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
T1,T2: TMyThread;
implementation
{$R *.dfm}
procedure Tform1.paint1;
begin
ThreadPaint(Image1.Canvas);
end;
procedure TForm1.paint2;
begin
ThreadPaint(Image2.Canvas);
end;
procedure TForm1.ThreadPaint(c:Tcanvas);
var
l,t:integer;
begin
l:=random(100);
t:=random(100);
c.Brush.Color:=TColor(random(100));
c.Rectangle(l,t,l+10,t+10);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
T1:=TMyThread.Create(False);
T1.b:=true;
T1.Priority:=tpLower ;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
T2:=TMyThread.Create(false);
T2.b:=false;
T2.Priority:=tpLower;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
if Button5.Caption = 'Stop2' then begin
T2.Suspend;
Button6.Caption := 'Next2';
Exit;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
T1.Resume;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
T2.Resume;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Button2.Caption = 'Stop1' then begin
T1.Suspend;
Button3.Caption := 'Next1';
Exit;
end;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
T1.Destroy;
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
T2.Destroy;
end;
procedure TForm1.Button9Click(Sender: TObject);
begin
Application.Terminate;
end;
end.
unit Unit2;
interface
uses
Classes;
type
TMyThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
public
b:boolean;
end;
implementation
Uses Unit1;
{ TMyThread }
procedure TMyThread.Execute;
begin
while not Terminated do
if b then
Synchronize(Form1.Paint1)
else
Synchronize(Form1.Paint2);
end;
end.