Thread (Timer gibi) Kullanımı hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Thread (Timer gibi) Kullanımı hakkında

Mesaj gönderen true_false »

merhabalar;

Kod: Tümünü seç

type
   deneme = class(TThread)
    private
    { Private declarations }
    protected
        procedure Execute; override;
    public
        destructor Destroy; override;
    end;
bu şekilde tanımlanmış bir thread'im var. bu thread'e aynı timer gibi ulaşıp execute olayını gerçeklerştirmek istiyorum. thread'in belirli aralıklarla çalışması lazım bunuda milisecond cinsinden nasıl verebiliriz
butona bastığım zaman bu kodu çalıştırabiliyorum

Kod: Tümünü seç

procedure deneme.Execute;
begin
  inherited;
   ShowMessage('merhaba');
end;
şu şekilde çağırdığım zaman

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
 deneme.Create(True).Execute;
end;
işte yukardaki kodu kendi kendine çalıştıran program çalışma aşamasında kendini bizim belirttiğimiz zaman aralıklarında tetikleyen bir thread'a ihtiyacım var thread hakkında bildiklerim kısıtlı bunu thread'a değilde timerda yapabilirsin diyenler oldu zaten projem timerdan thread'a geçireceğim. sanırım thread'a halletmem daha mantıklı görüşlerinizi ve thread hakkında bilgileriniz bekliyorum
type
Tform1 = class(Tform)
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

GetTickCount her milisaniye için sistem saat değerini verir. Windows API fonksiyonudur.

Kod: Tümünü seç

type
   deneme = class(TThread)
    private
    { Private declarations }
    protected
        procedure Execute; override;
        procedure islem;
    public
        StartTickCount,Delay:Cardinal;
        destructor Destroy; override;
    end;

procedure deneme.islem;
begin
  ShowMessage('merhaba');
end;

procedure deneme.Execute;
var y:Cardinal;
begin
  StartTickCount:=GetTickCount;
  repeat
    y:=GetTickCount;
    if StartTickCount+Delay>=y then begin
      islem;
      StartTickCount:=y;
    end;
  unil False;
end;
kodunu

Kod: Tümünü seç

var knl:dene;
begin
  knl:=deneme.Create(True);
  knl.delay:=100;//<-100 milisaniye
   knl.execute;
end;
şeklinde kullanırsak her 100 milisaniyede bir islem prosedürü çalışır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
true_false
Üye
Mesajlar: 401
Kayıt: 22 Tem 2004 02:03
Konum: sıkıntı çekmişlere yakın bi yerden

Mesaj gönderen true_false »

Teşekkürler.
type
Tform1 = class(Tform)
Cevapla