Merhaba,
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.
Ş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 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;
Misafirler için gizlenen link, görmek için
Giriş yap veya üye ol.
,*
Misafirler için gizlenen link, görmek için
Giriş yap veya üye ol.
*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.
Misafirler için gizlenen link, görmek için
Giriş yap veya üye ol.
'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 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;
