- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
var
Form1: TForm1;
i:integer; // глобальные переменные - "общие"
CritSec:TCriticalSection; // объект критической секции
implementation
{$R *.dfm}
procedure ThreadFunc;
begin
while (i<100000) do
begin
CritSec.Enter; // открываем секцию
i:=i+1; //увеличиваем i
Form1.Label1.Caption:=IntToStr(i); //из потока к элементам формы нужно обращаться через имя формы
CritSec.Leave; // закрываем
end;
endthread(0); // красиво выходим из потока.
end;
procedure TForm1.Button1Click(Sender: TObject);
var tid1,tid2,id:longword;
begin
i:=0;
tid1:=beginthread(nil,0,Addr(ThreadFunc),nil,0,id); //запускаем функцию ThreadFunc в потоке
tid2:=beginthread(nil,0,Addr(ThreadFunc),nil,0,id); //в tid2 присваиваем Идентификатор потока, который пригодится позже.
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CritSec:=TCriticalSection.Create; // создаём объект критической секции, на всё время работы программы
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
CritSec.Free; // разрушаем
end;
end.
Уебище, блять, лесное.
http://grabberz.com/showthread.php?t=24619