Merhaba Arkadaşlar Bir sorum Olacaktı.
Bir tane recursive fonksiyonum var. bu fonksiyon normalde çalıştığında sistemde kilitlenmeler yaşanmakta tabi bunu engellemenin en mantıklı yolu thread kullanmak. recursive fonksiyonlarını thread ile nasıl kullanılıyor.
Reqursive fonksiyonunuzun içinde ne yaptığınız önemli !
Thread kullanımın amacı programın geç cevap verdiği yada cevap veremediği bir işlemden dolayı kilitlenmesini, donmasını önlemek. Sonuç olarak olay fonksiyonun recursiv (kendini çağıran) olması değil. Programın düzgün çalışmasını sağlamak.
type
TGeneralThread = class(TThread)
private
FDConnection: TFDConnection;
// procedure Start;
{ Private declarations }
protected
procedure Execute; override;
destructor Destroy; override;
public
CommandList: TStringList;
CommandArray: TSuperArray;
ProcessAction: string;
procedure DoExecute;
function AddNewTrusteeThread(form: TStringList): string;
yukarıdaki gibi bir thread unit var. burada addnewtrusteethread doexecute tartafından tetikleniyor
doexecute de execute ile tetikleniyor.
procedure TGeneralThread.DoExecute;
begin
try
case IndexStr(ProcessAction, ['Add', 'Remove', 'Save']) of
0:
AddNewTrusteeThread(CommandList);
1:
RemoveFolderTruesteeThread(CommandArray);
2:
SavePermissionThread(CommandList);
else
WriteExceptionLog('Hatalı Parametre Girildi');
end;
finally
end;
end;
procedure TGeneralThread.Execute;
begin
inherited;
try
DoExecute;
finally
Terminate;
end;
end;
end.
bunu ben farklı bir yerden threat i çalıştırıyorum. orası da altta
function AddNewTrustee(form: TStringList): string;
var
thAdd: TGeneralThread;
begin
try
try
thAdd := TGeneralThread.Create(true);
thAdd.FreeOnTerminate := True;
thAdd.CommandList := TStringList.Create;
thAdd.ProcessAction := 'Add';
thAdd.CommandList.Text := form.Text;
thAdd.Start;
except
on E: Exception do
WriteExceptionLog('Thread Save Error :' + E.Message);
end;
finally
//thAdd.Free;
end;
end;
burada bir iş verdikten sonra 2.işi verince kilitlenme yaşanıyor aslında sorun bu. normalde kuyruğa alması gerekmez mi? yada hata neden kaynaklı olabilir.
kodları biçimli bir şekilde düzenledim. kusura bakmayın.
@
powerghost,
@
AYHAN_ASLAN
Form editörümüz üzerinde kod biçimlendirme amacı ile kullandığımız 2 adet buton bulunmaktadır.
Delphi Logolu olan (
Delphi Kod Ekle) buton ile
Delphi kodu, Süslü Parantez simgeli buton (
Kod Biçimlendirme) ile de diğer dillere ait (
SQL'de dahil) kodlar eklenerek (aşağıdaki ekran görüntüsünde işaretlenmişir), kod biçimlendirme yapılmaktadır.
Bu kapsamda;
Daha önce kullanmış olduğunuz
[code] taglarını kod biçimlendirme
Tag'ları ile değiştirilmiştir.
Sonraki kod kullanımlarında doğru kod tag'larını kullanarak bize yardımcı olursanız memnun oluruz.
Aksi durumda
DelphiCan Forum Kurallarında belirtilen yaptırımlar uygulanacaktır.
İlgi ve anlayışınız için şimdiden teşekkür eder, iyi çalışmalar dileriz.
Önemli Not: Herhangi bir yerden kopyaladığınız metni, DelphiCan metin editörüne yapıştırmadan önce, metin editörünün araç çubuğunda bulunan "Kaynağı Görüntüle" butonuna tıklayın. Daha sonra kopyaladığınız metni yapıştırın. Böylece harici bir kaynaktan aldığınız metin biçimlendirmesi yok sayılacaktır.