Delphi Can

Orjinalini görmek için tıklayınız: kod timer icinde bir kere islesin
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
if _gMod=3 then   //limitsiz
          begin
          if (snc1=1) and (adm5<>2) then
                                    begin
                                    adm5:=2;
                                    snc5:=OyunKapatAdim5_OyunuYenidenAcLIMITSZ;  //oyunu yeniden ac
                                    end;
arkadaslar yukardaki kodda OyunKapatAdim5_OyunuYenidenAcLIMITSZ fonksiyonunun 1 kere calismasini istiyorum kodlar timer icinde
ikinci kez timer tetiklendiginde bu kod bloguna girmesini istemiyorum.
ama kod surekli bu bloga griyor 
adm5 degiskeni global degisken sebebi ne olabilir acaba
bir kere calismasini istediginiz durumlarda siz ne yapiyorsunuz
saygilar
Temel mantık;
  if Self.Tag=0 then
 begin
   //Bir defaya mahsus çalıştırmak istediğiniz kodlar
   Self.Tag:=1;
 end;

Kodunuzda bir defa çalışmayı etkileyen iki kontrol var;
_gMod=3 olması,  snc1=1 ve adm5<>2 olması

Bir defa çalışması için _gMod değerinin mutlaka 3 olması,  snc1 değerinin 1 ile birlikte adm5 değerinin de 2 olmaması ve sonrassında bu şartı sağlayamaması gerekiyor.

Özetle _gMod=3 olsun;
snc1=1 iken ve adm5 2 den farklı bir değere sahip iken belirttiğiniz blok bir defa çalışacaktır.
Bu noktadan sonra, artık iki şartı değiştirmek gerekiyor.  
Her defasında çalışıyorsa şartlar değişmemiş demektir.
burdaki sorun adm5=2 0ldugu halde kod bloguna gecmesi <> esitdegil gorevini yapmiyor
self.tag hemen deniyorum

bu arada OyunKapatAdim5_OyunuYenidenAcLIMITSZ; kod blogunda dela var for dongusu icinde 10 sn bekleme yapiyor
Delay(1000);
sanirim kod oraya girip cikamiyor bu arada timer da o bloga her seferinde giris yapiyor

sorunu anladim. OyunKapatAdim5_OyunuYenidenAcLIMITSZ fonksiyonuna gidince icerisinde delay gecikmesi oldugu icin fonksiyonu tamamlayana kadar devam ediyor.
self.tag da da durum ayni oldu.
bir fonksiyonu bir kere aktif oldugunda icindeki tum kodlar tamamlanana kadar islemeye devam ediyor saniyorum oysa gecikme koyunca surekli o fonksoyona tetikleme kokmak gerekiyormus
taki fonksiyon tamamlanana kadar
bu duruma gore duzenleme yapmaya calisacagim
saygilar
(28-04-2024, Saat: 20:17)sadikacar60 Adlı Kullanıcıdan Alıntı: [ -> ]burdaki sorun adm5=2  0ldugu halde kod bloguna gecmesi <>  esitdegil gorevini yapmiyor
self.tag hemen deniyorum

bu arada   OyunKapatAdim5_OyunuYenidenAcLIMITSZ; kod blogunda dela var for dongusu icinde 10 sn bekleme yapiyor
Delay(1000);
sanirim kod oraya girip cikamiyor bu arada timer da o bloga her seferinde giris yapiyor

sorunu anladim.  OyunKapatAdim5_OyunuYenidenAcLIMITSZ  fonksiyonuna gidince icerisinde delay gecikmesi oldugu icin fonksiyonu tamamlayana kadar devam ediyor.
self.tag da da durum ayni oldu.
bir fonksiyonu bir kere aktif oldugunda icindeki tum kodlar tamamlanana kadar islemeye devam ediyor saniyorum oysa gecikme koyunca surekli o fonksoyona tetikleme kokmak gerekiyormus
taki fonksiyon tamamlanana kadar
bu duruma gore duzenleme yapmaya calisacagim
saygilar


Timer' ın ontimer eventına girdiğinde ilk satıra Timer1.Enabled:=False;

Kolaylıklar dilerim
yada global bi değişken tanımlayın. Form creatinde 0 olsun değeri.
Timer'a girdiğinde 0 yapın. ve timer içnide o değeri if ile 1 mi deil mi kontrol ettirin ona göre çalıştırın kodlarınız.
duzelttim arkadaslar cok tesekkur ederim
hobi olarak teknik her konuda bilgim var plc programlarken kullandigimiz bir ladder ide var ordaki mantigi timer icinde kullandim.
timer aktif edildiginde ilk bloga giris yapiyor ilk is blogundaki gorev tamamlanana kadar timer dongu devam ediyor.
ilk is blogu tamamlaninca ikinci blokdaki goreve gecis veriyorum global sabit degiskenler kullanarak timer icinde bir cok gorevi tamaladiktan sonra en sonunda butun gorevler tamamlandiysa timer devreden cikartiyorum.
saygilar sunarim