Sleep süresini 24 saat yapma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Sleep süresini 24 saat yapma

Mesaj gönderen eyalin »

Arkadaşlar hepinize merhaba.mesela şöyle bi kod olduğunu düşünün;

Kod: Tümünü seç

procedure TAdware_Update.ServiceExecute(Sender: TService);
begin
while not Terminated do
  begin
  Yapmak istediğim şeyler;//asıl yapılacaklar
  sleep(86400000);//bi 24 saat ara verip tekrar üstteki satır çalışacak
  ServiceThread.ProcessRequests(false);
  end;
end;
Burda farkettiğiniz gibi 24 saatte bir ,bi kontrol yapmak istiyorum fakat kafama takılan şu.Sleep komutuna böyle yüksek bi değeri vermek doğrumudur.Yoksa timer thread ikilisi ile mi çözmek gerek.Sizin fikrinizi merak ediyorum.Birde sleep kullandığımız zaman stabil olurmu olmaz mı?
Hepinize kolay gelsin....
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Timer ile çözmek daha doğru olacaktır. Her 24 saatte bir timer tetiklenir ve işlevleri yerine getirir. Ama dilerseniz Timer olayında işlevleri yapmak için ayrıca THREAD oluşturabilirsiniz.
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Mesaj gönderen eyalin »

Murat hocam çok teşekkürler ilgilendiğiniz için.İyi çalışmalar.
dilekdurgun
Üye
Mesajlar: 30
Kayıt: 03 Kas 2005 05:01
İletişim:

Sleep süresini 24 saat yapma

Mesaj gönderen dilekdurgun »

merhaba murat hocam yeni bir baslikacmaktansa buraya yazmaya karar verdim konu asa yukari ayni. timer i spinedit.value sine gore nasil zamanlaya bilirim. ornek

spinedit.value := 30 ; // bu 30 saniye olarak atanacak
sure dolunca
showmessage('zaman geldi'); // gibi msj vercek

bu dongu boyle devam edicek. her 30 saniye de bir msj vericek.. bu konuda yardim istiyorum sizlerden ... :roll:
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

var
Sure:Integer;
...

Sure:=0;
...
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(Sure);
label1.Caption:=Timetostr(Time);
If Sure=Spinedit.value Then Begin
Sure:=0;
Showmessage('Süre doldu...');
end;
end;

Kolay gelsin
selam
Üye
Mesajlar: 51
Kayıt: 02 Tem 2003 07:08

Mesaj gönderen selam »

SpinEdit' in Change olayında Value' su Timer' ın Interval değerine atanabilir. Sonra Timer ın Timer eventinde istenilen işlem yapılır.
dilekdurgun
Üye
Mesajlar: 30
Kayıt: 03 Kas 2005 05:01
İletişim:

Mesaj gönderen dilekdurgun »

White Rose yazdı:var
Sure:Integer;
...

Sure:=0;
...
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(Sure);
label1.Caption:=Timetostr(Time);
If Sure=Spinedit.value Then Begin
Sure:=0;
Showmessage('Süre doldu...');
end;
end;

Kolay gelsin

dediginiz gibi olmadi yada ben yapamadim.. sisteme cok yuk binecek ama anca 2 timer ile bunu basardim

Timer1 enabled ture ve interval degeri =1 olacak

Kod: Tümünü seç

Timer1.Interval := spinedit1.Value*1000;
Timer1.Enabled:=False;
ShowMessage('Hello');
Timer2.Enabled :=true;
Timer2 enabled False olacak

Kod: Tümünü seç

timer1.Enabled := true;
yardimci olan tum arkadaslara tesekkur ederim ;o)
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

dilekdurgun demişki:

Kod: Tümünü seç

dediginiz gibi olmadi yada ben yapamadim.. sisteme cok yuk binecek ama anca 2 timer ile bunu basardim 
göndermiş olduğum kodu deneyip öyle göndermiştim ve gayet düzenli olarak çalışıyordu.

daha açık yazayım isterseniz.

Kod: Tümünü seç

var
  Form1: TForm1;
  Sure:Integer;

implementation

{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
     Sure:=0;
     Timer1.Enabled:=False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     Timer1.Enabled:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
     Label1.Caption:=TimeToStr(Time); // seçimlik
     Inc(Sure);
     If Sure=JvSpinEdit1.Value Then begin   //JvSpinEdit1.Value=30
        Sure:=0;
        Showmessage('Süre bitti...');
     end;
end;
Kolay gelsin
dilekdurgun
Üye
Mesajlar: 30
Kayıt: 03 Kas 2005 05:01
İletişim:

kendi cozumum ....

Mesaj gönderen dilekdurgun »

Kod: Tümünü seç

var
  Form1: TForm1;
  Sure:Integer;

implementation

{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
     Sure:=0;
     Timer1.Enabled:=False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     Timer1.Enabled:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
     Label1.Caption:=TimeToStr(Time); // seçimlik
     Inc(Sure);
     If Sure=JvSpinEdit1.Value Then begin   //JvSpinEdit1.Value=30
        Sure:=0;
        Showmessage('Süre bitti...');
     end;
end;
yukarida verdiginiz kod ile bu kod ayni degil zaten arti her msj dan sonra button tiklamak zorundayim bunu istemiyorum. benim kodumda mesaj vermiyor baska bir islem yaptiriyorum. bu yuzden bu kod isimi gormedi ilgilenen herkese cok tesekkur ederim. kendi cozumum :
Forma 2 adet timer koyudum . timer 1 enabled si false ve interval degeri 1
timer1 event a :

Kod: Tümünü seç

procedure TMainFrm.Timer1Timer(Sender: TObject);
begin
Timer1.Interval := spinedit.Value*1000;
Timer1.Enabled:=False;
Btn1.Click;/// yapacak oldugu islem
Timer2.Enabled :=true;
end;
timer 2 event a ise

Kod: Tümünü seç

timer1.Enabled := true;
bu kadar ama iste dedigim gibi sistem kaynaklarini cok yiyecek... ama isimi gordu ... :idea: :idea:
Kullanıcı avatarı
White Rose
Üye
Mesajlar: 726
Kayıt: 06 Tem 2005 09:41
Konum: Güneyden
İletişim:

Mesaj gönderen White Rose »

Yani bu kod sadece bir örnek ve bilgilendirme amaçlı bunu kendinize göre değiştirmek sizin elinizde :), koddaki Showmessage yerine çalıştıracağınız kod bloğunu, procedure yada functionu tanımlamak ta sizin elinizde, dilediğiniz gibi yönlendirme yapabilirsiniz.
Kolay gelsin...
Cevapla