Basit bir thread uygulaması (CreateThread apisi)

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Basit bir thread uygulaması (CreateThread apisi)

Mesaj gönderen gkimirti »

Kod: Tümünü seç

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
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
NetZero
Üye
Mesajlar: 136
Kayıt: 14 Ağu 2004 11:12
Konum: Bursa
İletişim:

Mesaj gönderen NetZero »

//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.

Kod: Tümünü seç

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.
c#

:alsana: :boks:
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

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 :)
ÜŞENME,ERTELEME,VAZGEÇME
Cevapla