Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
tek butonda bütün komutları sırasıyla gerçekleştirmek?
#1
Merhaba sürekli yaşadığım bir sorun artık sormak zorunda hissettim. Bu sorunu genelde timer ile çözüyorum fakat yine de sağlıklı olmadığını düşünüyorum belki daha iyi bir çözüm biliyorsunuzdur. Şimdi buttonun click kısmı şu şekilde.

[Ars=delphi]procedure TForm1.Button2Click(Sender: TObject);
begin


//sinavdurumu//
ServerMethodMerhaba.CommandText:='TServerMethods1.MerhabaEchoString';
ServerMethodMerhaba.Params[0].AsString:='select soru from bilsoru where id='+char(39)+'1'+char(39);
ServerMethodMerhaba.ExecuteMethod ;
sinavdurumu:= ServerMethodMerhaba.Params[1].AsString;


//////////sinav durumu///



    if sinavdurumu ='1' then
 begin
siralamaLayout.Visible:=false;
YarisKazanGirisLayout.Visible:=True;
end
  else
  begin
    showmessage('Yarışma Süresi Bitti.!');
  end;
end;[/ars]

şimdi burada client serverdan sinav durumu verisini çekiyor ve çektiği veri eğer 1 ise başka bir pence açılıyor.

bazen serverda gecikme yaşanabilir. Bu sebeple ben önce sinav durumu verisi çekildikten sonra if kısmının çalışmasını istiyorum bunu nasıl yapabilirm?
Cevapla
#2
While döngüsü ile sınavdurumunun boş olup olmadığını kontrol et. Eğer boş ise bilgi gelene kadar sleep komutu ile beklet. Değilse elseden sonra çalışmasını istediğin kodları yaz.

while sinavdurumu='' do begin
Application.ProcessMessages;
Sleep(5);
end else begin
//bu kısma  çalışmasını istediğin kodları yaz...

end;

Veya şu şekilde daha sağlıklı olabilir (kodları test etme imkanım şuan için yok test edersin..)
procedure TForm1.BitBtn1Click(Sender: TObject);
Const
 MiliSaniyeBekleme = 2000;
Var
 boolDongudenCik : Boolean;
 ZamanBasla      : Cardinal;
 
begin
 
   boolDongudenCik := False;
 
 while NOT boolDongudenCik do
 begin
   ZamanBasla    := GetTickCount;
   while GettickCount < (ZamanBasla + MiliSaniyeBekleme) do
   begin
     Application.ProcessMessages;
     Sleep(1);
   end;
   if sinavdurumu <>'' then boolDongudenCik := True
     else boolDongudenCik := false;
 end;
 ShowMessage('Bilgi geldi..');
end;
Cevapla
#3
Ayrıca sürekli veritabanına sormak yerine kullandığınız veritabanına ait pipe, alerts, vs. veritabanının sizin uygulamanıza haber verebileceği (beklediğiniz kayıt geldiğinde/oluştuğunda) bir yapı daha performanslı olacaktır.
Cevapla
#4
Merhaba,

Gerçekleştirmek istediğiniz "bütün komutlar" hakkında biraz daha bilgi verirseniz daha sağlıklı olacaktır. Cevap şıkkı butonlarından bahsetmiyorsunuz anladığım kadarıyla.
Cevapla
#5
(21-02-2018, Saat: 21:34)hakanharbeli Adlı Kullanıcıdan Alıntı: Merhaba sürekli yaşadığım bir sorun artık sormak zorunda hissettim. Bu sorunu genelde timer ile çözüyorum fakat yine de sağlıklı olmadığını düşünüyorum belki daha iyi bir çözüm biliyorsunuzdur. Şimdi buttonun click kısmı şu şekilde.

[Ars=delphi]procedure TForm1.Button2Click(Sender: TObject);
begin


//sinavdurumu//
ServerMethodMerhaba.CommandText:='TServerMethods1.MerhabaEchoString';
ServerMethodMerhaba.Params[0].AsString:='select soru from bilsoru where id='+char(39)+'1'+char(39);
ServerMethodMerhaba.ExecuteMethod ;
sinavdurumu:= ServerMethodMerhaba.Params[1].AsString;


//////////sinav durumu///



    if sinavdurumu ='1' then
 begin
siralamaLayout.Visible:=false;
YarisKazanGirisLayout.Visible:=True;
end
  else
  begin
    showmessage('Yarışma Süresi Bitti.!');
  end;
end;[/ars]

şimdi burada client serverdan sinav durumu verisini çekiyor ve çektiği veri eğer 1 ise başka bir pence açılıyor.

bazen serverda gecikme yaşanabilir. Bu sebeple ben önce sinav durumu verisi çekildikten sonra if kısmının çalışmasını istiyorum bunu nasıl yapabilirm?

Zaten paylaştığınız kod istediğinizi ifade ettiğiniz şeyi yapıyor.! Yani client, server tarafındaki bir metodun işletilmesi emrini veriyor, iş server tarafında yapılıyor, cevap client'a geliyor. Ardından uygulamanız kaldığı yerden devam ediyor ve koşul kontrol ettiğiniz kod blokları işletiliyor. Yani bütün iş beklendiği gibi senkron bir şekilde ilerliyor. Siz ne istiyorsunuz, asenkron olmasını mı ?
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#6
(23-02-2018, Saat: 12:02)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:
(21-02-2018, Saat: 21:34)hakanharbeli Adlı Kullanıcıdan Alıntı: Merhaba sürekli yaşadığım bir sorun artık sormak zorunda hissettim. Bu sorunu genelde timer ile çözüyorum fakat yine de sağlıklı olmadığını düşünüyorum belki daha iyi bir çözüm biliyorsunuzdur. Şimdi buttonun click kısmı şu şekilde.

[Ars=delphi]procedure TForm1.Button2Click(Sender: TObject);
begin


//sinavdurumu//
ServerMethodMerhaba.CommandText:='TServerMethods1.MerhabaEchoString';
ServerMethodMerhaba.Params[0].AsString:='select soru from bilsoru where id='+char(39)+'1'+char(39);
ServerMethodMerhaba.ExecuteMethod ;
sinavdurumu:= ServerMethodMerhaba.Params[1].AsString;


//////////sinav durumu///



    if sinavdurumu ='1' then
 begin
siralamaLayout.Visible:=false;
YarisKazanGirisLayout.Visible:=True;
end
  else
  begin
    showmessage('Yarışma Süresi Bitti.!');
  end;
end;[/ars]

şimdi burada client serverdan sinav durumu verisini çekiyor ve çektiği veri eğer 1 ise başka bir pence açılıyor.

bazen serverda gecikme yaşanabilir. Bu sebeple ben önce sinav durumu verisi çekildikten sonra if kısmının çalışmasını istiyorum bunu nasıl yapabilirm?

Zaten paylaştığınız kod istediğinizi ifade ettiğiniz şeyi yapıyor.! Yani client, server tarafındaki bir metodun işletilmesi emrini veriyor, iş server tarafında yapılıyor, cevap client'a geliyor. Ardından uygulamanız kaldığı yerden devam ediyor ve koşul kontrol ettiğiniz kod blokları işletiliyor. Yani bütün iş beklendiği gibi senkron bir şekilde ilerliyor. Siz ne istiyorsunuz, asenkron olmasını mı ?

tabiki de senkron bir şekilde ilerlemesini istiyorum tuğrul hocam :Smile   fakat serverdan cevap geç gelirse cevabın gelmesini beklemeden if satırını çalıştırır mı diye düşünmüştüm
Cevapla
#7
(25-02-2018, Saat: 21:24)hakanharbeli Adlı Kullanıcıdan Alıntı: fakat serverdan cevap geç gelirse cevabın gelmesini beklemeden if satırını çalıştırır mı diye düşünmüştüm
Serverdaki komuta Sleep ile biraz bekleme koyup gözlemleyin bakalım ne olacak Wink
There's no place like 127.0.0.1
WWW
Cevapla
#8
(25-02-2018, Saat: 21:24)hakanharbeli Adlı Kullanıcıdan Alıntı:  fakat serverdan cevap geç gelirse cevabın gelmesini beklemeden if satırını çalıştırır mı diye düşünmüştüm


Çalışmaz, delphi java gibi değil Smile
WWW
Cevapla
#9
Eğer sınav puanlama işlemi Server üzerinde adım adım değil de sonuçların tümü üzerinden yapılıyorsa VEYA Client üzerinde yapılıyorsa, sınav sorularını ilk sezonda alıp yerelde işleme tabi tutarsanız gecikme vs. sorunu yaşamadan kullanıcınızı memnun edersiniz.

En azından 3'erli 5'erli bloklar halinde soruları almak da SERVER tarafından gecikme yaşanmadan arka plan iletişim yaparak bekleme hissetmeden iş görecektir.
Hem senkron hem de asenkron karışık yani.

Özetle kullanıcı bir kaç soruya cevap vereceği sırada SERVER'dan sonraki bir kaç soru çekilebilir ve o ana kadar olan cebapların SERVE'a yöneltilmesi sağlanabilir.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#10
(26-02-2018, Saat: 15:44)mrmarman Adlı Kullanıcıdan Alıntı: Eğer sınav puanlama işlemi Server üzerinde adım adım değil de sonuçların tümü üzerinden yapılıyorsa VEYA Client üzerinde yapılıyorsa, sınav sorularını ilk sezonda alıp yerelde işleme tabi tutarsanız gecikme vs. sorunu yaşamadan kullanıcınızı memnun edersiniz.

En azından 3'erli 5'erli bloklar halinde soruları almak da SERVER tarafından gecikme yaşanmadan arka plan iletişim yaparak bekleme hissetmeden iş görecektir.
Hem senkron hem de asenkron karışık yani.

Özetle kullanıcı bir kaç soruya cevap vereceği sırada SERVER'dan sonraki bir kaç soru çekilebilir ve o ana kadar olan cebapların SERVE'a yöneltilmesi sağlanabilir.

çok mantıklı bunun üzerine düşünecem üstat çok teşekkür ederim
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi