Basit bir thread uygulaması (CreateThread apisi)
gkimirti18.02.2004 - 09:03:40

unit create_thread;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TFrmCreateThread = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FrmCreateThread: TFrmCreateThread;
hThr1, hThr2: THandle;

implementation

{$R *.DFM}

procedure Thread1;
var
i: Integer;
begin
for i := 1 to 100 do
begin
FrmCreateThread.Label1.Caption := IntToStr(i);
sleep(50);
end;
end;

procedure Thread2;
var
i: Integer;
begin
for i := 1 to 100 do
begin
FrmCreateThread.Label2.Caption := IntToStr(i);
sleep(50);
end;
end;

procedure TFrmCreateThread.Button1Click(Sender: TObject);
begin
Createthread(nil, 0, @Thread1, nil, 0, hThr1);
end;

procedure TFrmCreateThread.Button2Click(Sender: TObject);
begin
Createthread(nil, 0, @Thread2, nil, 0, hThr2);
end;

procedure TFrmCreateThread.FormCreate(Sender: TObject);
begin
terminateThread(hThr1, 9999);
terminateThread(hThr2, 9999);
end;

end.


form uzerindeiki buton ve iki label var
butonlardan birine basıp ardından digerine basarsanız
iki dongu birbirinden bagımsız saymaya baslar
normalde butonların olaylarını kullanınca
birinciye bastıktan sonra ikinciye basıldıgı anda birinci askıya alınıp
ikinci saymaya baslıyor bitince birinciye geri donuyor
herneyse bu yapıyı ben de anet te bir elemanın tavsiyesi ile kullandım
gercekten basitligiyle kullanımı cok kolay geldi
tabi buna alternatif kendi thread nesnenizi de oturup yazabilirsiniz
daha detaylı bilgi icin
http://www.pergolesi.demon.co.uk/prog/threads/ToC.html
 
NetZero20.10.2004 - 20:42:26
//S.A yukarıda ki kod çalışmıyor..Ne kadar kasarsanız kasın çalışmıyor..bazı düzenlemeler yaptım..isinizi gorecektir..Gkimirtiye teşekkürü bir borç bilirim.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TfrmThreadCreate = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
end;

TFMSn = procedure;

var
frmThreadCreate: TfrmThreadCreate;
hThr1, hThr2: THandle;
DD, EE : TFMSn;

implementation

{$R *.DFM}

procedure thread1;
var
n: Integer;
begin
for n:=1 to 100 do begin
frmThreadCreate.Label1.Caption := IntToStr(n);
sleep(50);
end;
end;

procedure thread2;
var
i: Integer;
begin
for i:=1 to 100 do begin
frmThreadCreate.Label2.Caption := IntToStr(i);
sleep(50);
end;
end;

procedure TfrmThreadCreate.Button1Click(Sender: TObject);
begin
@DD := @thread1;
Createthread(nil, 0, @DD, nil, 0, hThr1);
end;

procedure TfrmThreadCreate.Button2Click(Sender: TObject);
begin
@EE := @thread2;
Createthread(nil, 0, @EE, nil, 0, hThr2);
end;

procedure TfrmThreadCreate.FormCreate(Sender: TObject);
begin
terminateThread(hThr1, 9999);
terminateThread(hThr2, 9999);
end;

end.
 
gkimirti21.10.2004 - 09:06:19
TFMSn nedir burda?
ayrıca yukardaki kod sadece delphi5 ve win2000 icin test edildi,
digerlerinde sorun cıkartabilir...
kapsamlı bir thread islemi yapılacaksa bu sekilde yapılmaması gerekir zaten
inceledigin icin sagol :)
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com