Юрий Дружинин
Юрий Дружинин

Есть многопоточное приложение в делфи, но при запуске двух потоков одновременно, она виснет, поможете?

код:

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.

КК
Ксения Колючева

нет
не помогу

Похожие вопросы
Delphi. Как получить хэндл приложения в процессе его запуска?
OpenGL. Нажатие двух клавиш одновременно на клавиатуре
как сохранить делфи проект приложением .exe?
ошибка при запуске и нажатии кнопки (раннее созданной в проге и настроенной) в делфи
Вопрос по потокам в делфи и комоненты idhttp
Нужно создать оконное приложение в делфи 7
Можно ли без модуля crt в Делфи красиво вывести 2мерный массив в консольном приложении? Если да, то как?
Проблема с запуском приложений с использованием Open GL
пишет ошибка запуска приложения 0xc000007b
googleupdate.exe - ошибка приложения ошибка при запуске приложения (0xc0000005)