AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread - ist das sauberer Code?!

Ein Thema von FAM · begonnen am 18. Feb 2015 · letzter Beitrag vom 18. Feb 2015
 
FAM

Registriert seit: 22. Dez 2014
47 Beiträge
 
Delphi XE Enterprise
 
#1

Thread - ist das sauberer Code?!

  Alt 18. Feb 2015, 07:16
Delphi-Version: 5
Hallo Zusammen,

habe eine Thread-Routine implementiert und frage mich jetzt ob das sauber geschrieben / ein sauberes Konzept ist.

Ich möchte zyklisch in einen ausgelagerten Thread bestimmte Business-Logik ausführen....

Thread-Lib

Delphi-Quellcode:

unit lib.livedata;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, event.types, DateUtils;

type

  // Ergebniswerte Callback
  TAsyncLivedataResult = record
    ErroText: String;
    ApplicationTimestamp: String;
    OPCConncetionTimestamp: String;
    ErrorCode: Integer; // Fehlercode im Fehlerfall, sonst 0 (=LIVEDATA_OK)
  end;

  TLivedataCallback = procedure(LivedataResult: TAsyncLivedataResult) of Object;

  TLivedataThread = class(TThread)
    FLivedataResult: TAsyncLivedataResult;
    FCallback: TLivedataCallback;

  protected
    procedure Execute; Override;
    procedure DoCallbackVCL;
  public
    constructor Create(Callback: TLivedataCallback); overload;
  end;

function ExecuteAsync(Callback: TLivedataCallback): Boolean;

implementation


  { EventTypes }

constructor TLivedataThread.Create(Callback: TLivedataCallback);
begin

  inherited Create(TRUE); // Thread gestoppt erzeugen
  FreeOnTerminate := TRUE;

  // Callback definieren
  FCallback := Callback;

  // Thread starten, ruft .Execute auf
  Suspended := FALSE;

end;

procedure TLivedataThread.DoCallbackVCL;
begin
  FCallback(FLivedataResult)
end;

procedure TLivedataThread.Execute;
begin

  // Code....
  
 
  // Callback
  if Assigned(FCallback) then // Callback-Funktion übergeben?
    Synchronize(DoCallbackVCL); // dann VCL-fähig ausführen

end;


function ExecuteAsync(Callback: TLivedataCallback): Boolean;
begin
  Result := TRUE;
  TLivedataThread.Create(Callback);
end;

end.
Benutzung der Lib in einer TTimer Komponente

Delphi-Quellcode:

...

uses
  // Livedata-Lib
  lib.Livedata

...

procedure TForm1.LivedataCallback(Result: TAsyncLivedataResult);
begin

  // foobar

end;

procedure TForm1.TimerRedundancyTimer(Sender: TObject);
begin
  // Aufruf Async Thread
  if lib.Livedata.ExecuteAsync(LivedataCallback) then
  begin
    // OK
  end
  else
    // Error

end;

habe das mal durch den Debugger laufen lassen, sieht erstmal OK aus. Im Interval (TTimer) wird der Async ausgeführt, die Frage ist nur ist das sauber oder würdet ihr das anders machen (z.b. Speicherfreigabe,...)?
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz