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
zamanlanmış görev tavsiyesi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- mustafasoy
- Üye
- Mesajlar: 154
- Kayıt: 02 Ağu 2013 05:00
- Konum: istanbul
- İletişim:
zamanlanmış görev tavsiyesi
http://www.mustafasoy.com.tr
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Re: zamanlanmış görev tavsiyesi
"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
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 !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Re: zamanlanmış görev tavsiyesi
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.
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
- mustafasoy
- Üye
- Mesajlar: 154
- Kayıt: 02 Ağu 2013 05:00
- Konum: istanbul
- İletişim:
Re: zamanlanmış görev tavsiyesi
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
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.
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Re: zamanlanmış görev tavsiyesi
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.
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..
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;
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..
- mustafasoy
- Üye
- Mesajlar: 154
- Kayıt: 02 Ağu 2013 05:00
- Konum: istanbul
- İletişim:
Re: zamanlanmış görev tavsiyesi
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.
Nasıl ki Soru sorarak öğrendiyseniz , öğrendiklerinizi cevap vererek öğretiniz.
Re: zamanlanmış görev tavsiyesi
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.