Merhaba,
Daniele Spinetti, Yeniden Deneme Mekanizması konu başlıklı makalesinde işe yarar bir konuya değinmiş.
Uygulamalarda sık kullanılan bir olayın denenmesi veya tekrar edilmesi için kullanılabilecek bir yöntem.
Örneğin, internet veya lokal network bağlantısına ihtiyaç duyan bir uygulamanın, bağlantıyı gerçekleştirmek için sürekli bağlanma isteği oluşturması. (Bağlantı deneme sayısı ve her denemede bekleme süresi belirlenebiliyor)
Paylaşmış olduğu örnekte, küçük bir değişiklik yaparak; farklı işlerde kullanılabilecek kodu paylaşmak istiyorum.
Daniele Spinetti'nin örneğinde, yapılan işlemin hataya düşmesi (işlemin başarısız olması) durumunda, belirlenen sayıda işlemin tekrarlanması isteniyor.
Şimdi vereceğim örnekte ise; TTimer çalışma prensibine benzer bir tekrarlama mekanizması işletiliyor. Tek farkı prosedürel metodun dinamik olmasıdır.
Her TTimer nesnesi yalnızca bir metod (OnTimer) işletir. Bu yöntemle her prosedürünüzü bir TTimer'a dönüştürebilirsiniz.
Unit
Kullanımı
Daniele Spinetti, Yeniden Deneme Mekanizması konu başlıklı makalesinde işe yarar bir konuya değinmiş.
Uygulamalarda sık kullanılan bir olayın denenmesi veya tekrar edilmesi için kullanılabilecek bir yöntem.
Örneğin, internet veya lokal network bağlantısına ihtiyaç duyan bir uygulamanın, bağlantıyı gerçekleştirmek için sürekli bağlanma isteği oluşturması. (Bağlantı deneme sayısı ve her denemede bekleme süresi belirlenebiliyor)
Paylaşmış olduğu örnekte, küçük bir değişiklik yaparak; farklı işlerde kullanılabilecek kodu paylaşmak istiyorum.
Daniele Spinetti'nin örneğinde, yapılan işlemin hataya düşmesi (işlemin başarısız olması) durumunda, belirlenen sayıda işlemin tekrarlanması isteniyor.
Şimdi vereceğim örnekte ise; TTimer çalışma prensibine benzer bir tekrarlama mekanizması işletiliyor. Tek farkı prosedürel metodun dinamik olmasıdır.
Her TTimer nesnesi yalnızca bir metod (OnTimer) işletir. Bu yöntemle her prosedürünüzü bir TTimer'a dönüştürebilirsiniz.
Unit
unit RetryHelperU;
interface
uses
System.SysUtils;
type
TRetryHelper = class(TObject)
class procedure DoRetry(const ATimes: Integer; ADelayInMillis: Int64;
AProc: TProc);
end;
implementation
uses
System.Classes;
{ TRetryer }
class procedure TRetryHelper.DoRetry(const ATimes: Integer;
ADelayInMillis: Int64; AProc: TProc);
var
LRetry: Integer;
begin
TThread.CreateAnonymousThread(
procedure()
begin
LRetry := 0;
while LRetry <= ATimes do
begin
Inc(LRetry);
TThread.Queue(Nil,
procedure
begin
AProc()
end);
if ADelayInMillis > 0 then
TThread.Sleep(ADelayInMillis);
end;
end).Start;
end;
end.
Kullanımı
implementation
{$R *.fmx}
uses RetryHelperU;
procedure TForm1.Button1Click(Sender: TObject);
begin
TRetryHelper.DoRetry(20, 750,
procedure
begin
Form1.Edit2.Text := IntToStr(Edit2.Text.ToInteger + Edit1.Text.ToInteger);
end);
end;
DelphiCan'dır!



Sebebi saymaya her zaman ki gibi sıfırdan saymaya başlaması. Bu arada incelerken yeni birşey daha öğrenmiş oldum.