Halt benzeri bir komut ariyorum

Başlatan bunalmis, 04 Nisan 2010, 18:12:26

z

Asagidaki gibi program parcamiz olsun.
function F1():boolean
begin
            if x=1 then halt;
end;

function F2():boolean
begin
            ...........
            ...........
            F1();
            ...........
            ...........
end;


procedure Tform1.P1click(sender:Tobject);
begin
           F2();
           .........
           .........
           .........
end;


Eger X=1 olursa program durur.
Boyle degilde F1 fonksiyonunda X=1 olursa Form1 de baslatilmis tum fonksiyon yada procedurlerden cikilsin istiyorum.

Bunu basitse

function F1():boolean
begin
            result:=true;
            if x=1 then exit;
            result:=false;
end;

function F2():boolean
begin
            result:=true;
            ...........
            if F1() then exit;
            ...........
            ...........
            result:=false;
end;


procedure Tform1.P1click(sender:Tobject);
begin
           if F2() then exit;
           .........
           .........
           .........
end;


Seklinde yapabiliriz.

Boyle yapmak yerine ilk program parcacigindaki Halt yerine yazilacak bir komutla yapamazmiyim?
Tum islemleri durdurup Form1 in en yalin hic bir islemin baslatilmadigi duruma donmemi saglayan bir komutumuz varmi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

sekoli

Selamlar kolay gelsin,
bahsettiğiniz şekilde tek bir komut olduğunu sanmıyorum, ben hiç görmedim.

orhanc

Bunu yapmaktaki amacınız nedir ?
i'm doing nothing... Giddy Up  http://www.drorhan.com

z

Herhangi bir anda ornegin elektrik kesildi bilgisi gelirse o anki tum islemler terkedilsin ve ana forma donulsun.

Elektrik kesildiginde sistem o an icin icinden cikilmasi cok zaman alacak fonksiyonlari isletiyor olabilir. O fonskiyonun icinde de elektrik
kesildimi flagini zirt pirt kontrol etmek istemiyorum.




Bana e^st de diyebilirsiniz.   www.cncdesigner.com

orhanc

Elektrik kesilince program nasıl çalışacak ?
i'm doing nothing... Giddy Up  http://www.drorhan.com

SiVRiSiNEK

pc ups ile pc nin kontrol ettiği sistem ise çalışmayacak (çalıştığım yerde bu tip makinalar var oradan aklıma geldi)

z

Bu tıp durumlar için pratik bir yol yokmu?

Diyelimki 100 tane fonksiyon yazdınız. Her biri bir önceki fonskiyonu çağırıyor.

En baştaki fonksiyonu çağırdınız, o onu o onu derken 100. fonksiyona geldiniz.
Bu aşamada öyle bir durum oluştuki artık fonskiyonlardan gerisin geriye dönmenin anlamı yok. Sanki program yeni çalıştırılmış gibi en
başa dönmek hatta ana forma gelmek istiyorum.

Halt deyip programı yeniden başlattırmak çözüm ama yakışıklı değil. Yazılmış bir programın her satırına da hata kontrolu ekleyip hata
varsa fonskiyonu terket  demek de işime gelmiyor açıkcası.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

#7
Tümünü bir thread içine yerleştirirsin. Mesela Thread 10 dakikalık bir iş yapıyor olsun. Bunu daha 3. dakikada sonlandırmak istersen dışarıdan başka bir thread tarafından  veya formun kendisinden TerminateThread(.. fonksiyonu ile sonlandırırsın.  Aşağıdaki gibi sınırsız döngü veya başka bir iş yapıyor bile olsa sonlandırabilirsin.   
while true do 
begin   sleep(1)   end;


http://www.google.com.tr/search?hl=tr&safe=off&q=%22TerminateThread%22+%22delphi%22&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=

Tagli

#8
Java olsa bir exception oluştururdum, öyle bir exception olurdu ki bu iç içe olan fonksiyonlardan kaçmasına izin verirdim, en yukarı kadar giderdi. 100. fonksiyonu da atlattıktan sonra yakalar, gereğini yapardım.

Sanırım Delphi'de de exception kavramı var. Benzer bir yöntem izlenebilir.
Gökçe Tağlıoğlu

orhanc

o kadar fonksiyonu iç içe yazmak zorunda mısınız ? daha basit bi tasarım yapsanız bu kadar uğraşmazsınız.
i'm doing nothing... Giddy Up  http://www.drorhan.com

t2

#10
delphi için fonksiyonu bildirdik işte yolu yöntemi budur bunla yapılır.
http://www.google.com.tr/search?hl=tr&safe=off&q=%22TerminateThread%22+%22delphi%22&meta=&aq=f&aqi=&aql=&oq=&gs_rfai=

t2

Hatta başka bir program ile de sonlandırabilirsiniz. Thread işe başlamadan önce IDsini bir yere gönderir  yayın yapar yada dosyaya yazar. Bunu bilen her hangi bir program onu sonlandırabilir.

orhanc

100 tane fonksiyon çağıran programın amacı nedir? daha kolay bi yol bulunabileceğine eminim.
i'm doing nothing... Giddy Up  http://www.drorhan.com

Tagli

t2,
Bunlar dolambaçlı yöntemler. Exception yöntemi ise tam da bu tür işler için idealdir. Hataların sınıflandırılmasını, istenilen yerde istenilen şekilde çözülmelerini ve programın her yerinde "if" kullanmadan kontrol edilebilmelerini sağlar. "Hata" dediğim şey gerçek anlamda bir hata olmayıp kullanıcının oluşturduğu bir durum da olabilir.

orhanc,
bunalmis sadece örnek vermiş. 100 değil de 5 tane olsun, mantık aynı. Sayı az diye her fonksiyonun içine bir boolean değişken koyup kontrol etmek doğru olmaz. Belki iş görür ama iyi bir programcının yapacağı şey değil, özellikle de exception desteği veren yüksek seviye bir dil ile uğraşılıyorsa.
Gökçe Tağlıoğlu

z

Abartılı örneklerin sorunun anlaşılması açısından, basit kaçamak cevapların gelmemesi açısından verildiğini anlayın lütfen.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com