Нужно, чтобы memo заполнялось числами с помощью n-го количества потоков. Числа заполняются, только вот потоки некоректно работают (скорость остается такой же, как и без использования потоков). Подскажите, пожалуйста, где косяк.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SyncObjs;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TNewThread=class(TThread)
private
procedure UpdateMemo;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean);
end;
var
Form1: TForm1;
x,y,Thread:integer;
Work:boolean;
cs:TCriticalSection;
implementation
{$R *.dfm}
constructor TNewThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
x:=-1;
Work:=true;
for Thread:=1 to strtoint(Edit1.Text) do
TNewThread.Create(false);
Thread:=strtoint(Edit1.Text);
end;
procedure TNewThread.Execute;
begin
while Work do
begin
cs.enter;
inc(x);
if x<1000 then y:=x else work:=false;
cs.leave;
if work then
Synchronize(UpdateMemo);
end;
dec(thread);
end;
procedure TNewThread.UpdateMemo;
begin
Form1.Memo1.Lines.Add(inttostr(y));
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
cs:=TCriticalSection.create;
end;
end.