AGB  ·  Datenschutz  ·  Impressum  







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

Thread für einfache Funktionsauslagerungen

Ein Thema von ibp · begonnen am 20. Jun 2012 · letzter Beitrag vom 20. Jun 2012
 
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#1

Thread für einfache Funktionsauslagerungen

  Alt 20. Jun 2012, 12:20
Hallo,

beim Umstellen eines Programms von Methoden auf Stored Procedures soll das ganze in einen Thread gepackt werden. Die SP sind komplex und zeitaufwendig, bisher wurden diese von der Mainform übernommen. Dabei gab es dann ein Infofenster mit einer Pseudoprogressbar die signalisiert das etwas in Arbeit ist. Bei der Umstellung auf SP friert nun dieses Infofenster ein. Lösung: Auslagerung in Thread.

Ist der nachfolgende Ansatz so richtig oder was ist noch zu beachten. Geht er vielleicht einfacher?

Danke schon mal....

Delphi-Quellcode:
  TMachWasLangesInDerDBThread = class(TThread)
    private
      fSPQuery : TIBQuery;
      fInProgress : Boolean;
    protected
      procedure Execute(); override;
    public
      constructor create(const aPKey,aTKey:TKey; aChildLevel:Integer);
      destructor Destroy; override;

      property InProgress : Boolean read fInProgress;
  end;

constructor TMachWasLangesInDerDBThread.create(const aPKey,aTKey:TKey; aChildLevel:Integer);
begin
  inherited create(False);
  FreeOnTerminate := False;

  fInProgress := True;

  fSPQuery := TIBQuery.Create(nil);
  try
    fSPQuery.SQL.Text:='EXECUTE PROCEDURE P_SORT...';
    fSPQuery.ParamByName(...);
  except
    on e: exception do
    begin
      showmessage(e.Message);
    end;
  end;
end;

destructor TMachWasLangesInDerDBThread.Destroy;
begin
  if Assigned(fSPQuery) then
  begin
    fSPQuery.Free;
  end;

  inherited destroy;
end;

procedure TMachWasLangesInDerDBThread.Execute;
begin
  try
    fSPQuery.ExecSQL;
  except
    on e: exception do
    begin
      showmessage(e.Message);
    end;
  end;
  fInProgress := False;
end;

.... im Hauptprozess Aufruf durch...

...
MeinInfoFenster.show;

aMYThread := TMachWasLangesInDerDBThread.create(...);
try
  while aMYThread.InProgress do
  begin
    MeinInfoFenster.Action;
    Sleep(1000);
  end;
finally
  aMYThread.Free;
end;
...

Geändert von ibp (20. Jun 2012 um 12:23 Uhr)
  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 21:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz