içiçe prosedur tanımlaması mı nedir bu??

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

içiçe prosedur tanımlaması mı nedir bu??

Mesaj gönderen unicorn64 »

merhaba arkadaşlar. yazmaya çalıştığım internet kafe programı için serverin tum clientleri restart/shutdown vs. işlemleri için internette araştırma yapıyordum. şöyle birşey buldum

Kod: Tümünü seç

Procedure TGGenel.Set_Bil_Kapat(Value: integer; oylesine: Boolean);
function SetPrivilege(privilegeName: string; enable: boolean): boolean;
var
tpPrev,
tp : TTokenPrivileges;
token : THandle;
dwRetLen : DWord;
begin
result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);
tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then
begin
if enable then
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
tp.Privileges[0].Attributes := 0;
dwRetLen := 0;
result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);
end;
CloseHandle(token);
end;
begin
if Oylesine then begin
SetPrivilege('SeShutdownPrivilege', true);
case value of
1: ExitWindowsEx(EWX_FORCE, 0);
2: ExitWindowsEx(EWX_LOGOFF, 0);
3: ExitWindowsEx(EWX_POWEROFF, 0);
4: ExitWindowsEx(EWX_REBOOT, 0);
5: ExitWindowsEx(EWX_SHUTDOWN,0);
end;
SetPrivilege('SeShutdownPrivilege', False);
end;
end;
kodları anlamayamadım bi türlü. procedure içinde bi function tanımlaması var. nedir bu kullanım daha önce de bi kaç yerde görmüştüm hep sorayım dedim kaldı ve artık sordum. merakımı giderecek var mı acaba???
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

Burada gördüğün, tam olarak iç içe fonksiyon değil, inline fonksiyondur (En azından C, C++ da böyle geçer). En büyük esprisi normal bir fonksiyona göre daha hızlı çalışmasıdır. Delphi'de nasıl bilmiyorum, ama C, C++'da inline fonksiyonlar çağırıldıkları fonksiyonun içine kopyalanarak derlenir. Bu da daha hızlı çalışmasını sağlar.

Kolay gelsin,
Bahadır Alkaç
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Mesaj gönderen csunguray »

Sizin biraz Pascal çalışmanız lazım.

Her bir procedure/function bir program gibidir. Kendine ait değişkenleri, sabitleri, procedure leri ve function ları vardır. Bu kodda tanımlanmış olan function sadece o procedure içinde geçerlidir. Bir de Pascal fonksiyon ve prosedürlerinin özyineli (recursive/kendi kendini çağıran) kullanımı vardır. Bir fonksiyon/prosedür kendi kendini çağırdığı zaman kendi içerisinde yerel olarak tanımlanmış tüm değişkenlerin değeri saklanır. Fonksiyon sonlandığı zaman değerler geri yerlerine konulur. Bu işlem stack ten çok hafıza yer. O yüzden bu işlem binlerce kez tekrarlanabilecek bir işlemse bu konuda dikkatli olmak gerekir. Stack tükenirse program Stack overflow hatası verir ve sonlanır.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Cevapla