zamanlanmış görev tavsiyesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

zamanlanmış görev tavsiyesi

Mesaj gönderen mustafasoy »

Merhabalar XE6 ile bir makine bakım uygulaması yazıyorum , proje neredeyse tamamlandı gibi
ancak periyodik yada rutin bakımlar için hatırlatıcı bir olay istediler ve aynı zamanda uygulamayı birden fazla firma kullanabilecek yapıda
şimdi kullanıcılar şu firma için şu makine için şu periyotta bana şu bilgileri hatırlat sms yada email gönder gibi bi istekte bulunurlarsa
1.eğer bunu android içerisine yazarsam ilgili zaman geldiğinde telefonda uygulamanın çalışıyor olması lazım ki hatırlatmada bulunsun
2.windows servis yazabilirim arkaplanda çalışır sürekli kontrollerde bulunur sürekli kontrol gereksiz geliyor
3.mssql in zamanlanmış görevlerini kullanabilirim ancak sql server kurulumlarında yada buraya yapılan müdahalede bütün bu ayarlar silinir
4.bu ayarları bir tabloda tutsam şu firma için şu makine için şu tarihte yada periyotlarda şu kişilere mail ,sms (sql server üzerinden sms gönderilmiyor bildiğim kadarıyla)gönder diye bir trigger yazar sp çalıştırır bir gün önceden bu işleri yaparım
kafam iyicene karıştı
umarım derdimi anlatabilmişimdir şimdi üstadlar nasıl bir yapı önerirsiniz
http://www.mustafasoy.com.tr
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: zamanlanmış görev tavsiyesi

Mesaj gönderen freeman35 »

"2.windows servis yazabilirim arkaplanda çalışır sürekli kontrollerde bulunur sürekli kontrol gereksiz geliyor"
kontrol etmediğin bir şeyin gerçekleşip gerçekleşmediğini yada koşulun sağlanmadığını nasıl bilebilirsin? Sadece her saniye sisteme yük bindirecek işlemler yaptırmak saçma, son yapılan işlem zamanı ile şimdiki zamanı karşılaştırmak yani iki tarih bilgisini karşılaştırmak cpu ya yük bindirmez.
Ben firebird de raplication yaptırtıyorum, süre kontrolü 15dk. yani her 15 dk da bir 8-10 db ye bağlanıp değişiklikler kotrol edilip varsa ilgili client a adsl üzerinden bağlantı kurup veriler işleniyor, ayrıca her connection tunel üzerinde, paket sıkıştırma max konumda. Servera bağlantı iki yönlü, yani server db den client a gönderirken aynı db ye 8-10 db den bağlantıda gelebiliyor. Server makina da dandik casper denen şeyin en ucuz modeliydi, 3-4 yıldır bakım makım da yapılmadı öle yerde tozun toprağın içinde duruyor.
sözün kısası iş tasarımda yük dağılımını iyi tasarlarsan, server makinaların görevi çalışmaktır, cpu boşta elektirik yakmasın :)
kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
omurolmez
Üye
Mesajlar: 187
Kayıt: 31 Eki 2012 11:41

Re: zamanlanmış görev tavsiyesi

Mesaj gönderen omurolmez »

Yanlış anlamadıysam, sizin durumunuzda servis uygulaması olup olmamasının tek farkı, hiçbir kullanıcı oturum açmasa da programın çalışmasının gerekip gerekmediğidir. Diğer bir deyişle, daima en az bir kullanıcının oturum açtığı bir masaüstüne mi program geliştiriyorsunuz yoksa hiçbir kullanıcının oturum açmayacağı bir sunucuya mı ?

Bu sorunun cevabına göre servis uygulaması yazabilir ya da kolayca programınız için <All Users>.<Startup> altında (registry veya file) kısayol yerleştirebilirsiniz.
Diğer bir seçenek te Windows Scheduled Task ı kullanmak olabilir.
Ömür Ölmez
Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

Re: zamanlanmış görev tavsiyesi

Mesaj gönderen mustafasoy »

sürekli kontrollerde bulunsun dan kastım şuydu aslında örneğin periyodik bakım 6 ay da bir yapılır dolayısıyla 6 ay sonra yapılacak bir işlem için 10 dakikada bir kontrole bulunayım olayı gereksiz geldi tabi birden fazla firmanın kullanacağını herbirinin de kayıt tarihleri farklı olabileceği varsayımına göre süre elbette azalacaktır
sonuçta zamanlanmış görevlere dahi atsak Windows zaman gelmişmi diye belirli periyotlarda kontrol ediyor,
haklısınız servis yazmak yada Windows açılışında bir exe çalıştırmak bile iş görecektir. yorumlar için teşekkürler
http://www.mustafasoy.com.tr
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: zamanlanmış görev tavsiyesi

Mesaj gönderen thelvaci »

Aslında yapmak istediğiniz iş için pek çok yöntem var ama bu yöntemlerin hemen hemen hepsi, boş yere CPU zamanından çalmak olur. Ben size WaitableTimer'ları öneriyorum bu iş için. Aşağıdaki örneği deneyebilir ve kendiniz için en uygun hali ile özelleştirebilirsiniz.

Kod: Tümünü seç

procedure TimerProc(lpArgToCompletionRoutine : Pointer; dwTimerLowValue, dwTimerHighValue : DWord); stdcall;
begin
  form1.Memo1.Lines.Add(TimeToStr(Time) + ' olay gerçekleşti');
end;

procedure TForm1.Button1Click(Sender: TObject);
type
  TInt64Rec = record
    Lo : DWord;
    Hi : DWord;
  end;
var
  SysTime : TSystemTime;

  Target,
  FileTime: TFileTime;

  I : Int64;
begin
  TimerHandle := CreateWaitableTimer(nil, false, 'TestWaitableTimer');

  SysTime.wYear       := 2014;
  SysTime.wMonth      := 09;
  SysTime.wDayOfWeek  := 0;
  SysTime.wDay        := 24;
  SysTime.wHour       := SpinEdit1.Value;
  SysTime.wMinute     := SpinEdit2.Value;
  SysTime.wSecond     := SpinEdit3.Value;
  SysTime.wMilliseconds := 0;

  SystemTimeToFileTime(SysTime, FileTime);
  LocalFileTimeToFileTime(FileTime, Target);

  TInt64Rec(I).Lo := Target.dwLowDateTime;
  TInt64Rec(I).Hi := Target.dwHighDateTime;

  SetWaitableTimer(TimerHandle, I, 0, @TimerProc, nil, false);

  SleepEx(INFINITE, true);

  ShowMessage('İşim bitti..');
end;
Yukarıdaki kod bloğunda gördüğünüz gibi; saat, dakika ve saniye dışarıdan parametrik olarak alınıyor. Ardından timer bu değerlere göre set ediliyor. Burada can alıcı nokta SleepEx çağrımı. SleepEx çağrımı ile timer'in zamanının gelmesine kadar bekleyeceğimizi söylemiş oluyoruz, ancak zaman kontrol işlemlerini bizim yerimize kernel yerine getiriyor. Belirtilen zaman geldiğinde WaitableTimer kernel nesnesi signaled duruma geçiyor ve SleepEx beklemeyi bırakıyor. Bu işlemler asenkron olarak gerçekleşiyor. Aynı zamanda sizin belirleyeceğiniz bir callback metodu da çağrılmış oluyor.

Tabii burada sizin bir Queue içinde ilgili olaylarınızı tutmanız gerekir. En önce gerçekleşecek olay Queue içinde ilk sırada olarak bulunacaktır. Bu sayede kuyruktan bir olay alıp, zamansal değerlerini SetWaitableTimer ile ayarlayıp bekleyebilir, timer signaled duruma geçtikten sonra kuyruktan diğerini alıp yola devam edebilirsiniz.

Kolay gelsin..
Kullanıcı avatarı
mustafasoy
Üye
Mesajlar: 154
Kayıt: 02 Ağu 2013 05:00
Konum: istanbul
İletişim:

Re: zamanlanmış görev tavsiyesi

Mesaj gönderen mustafasoy »

verdiğiniz kodu inceleyerek sonuç bildireceğim, vakit ayırdığınız için teşekkür ederim tuğrul bey
http://www.mustafasoy.com.tr
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
ebaytar
Üye
Mesajlar: 10
Kayıt: 03 Eki 2008 10:02

Re: zamanlanmış görev tavsiyesi

Mesaj gönderen ebaytar »

jedi nin TJvScheduledEvents bileşenini de inceleyin isterseniz işinizi görebilir. Aynı windows zamanlanmış görevleri gibi tanımlarınızı yaparak zamanı geldiğinde istediğiniz görev tanımlarının çalışmasını sağlayabilirsiniz.
Cevapla