Einzelnen Beitrag anzeigen

Thomas83

Registriert seit: 7. Jan 2008
180 Beiträge
 
#1

warten bis Thread keine Jobs mehr hat.....

  Alt 30. Okt 2008, 12:29
Servus,

habe da einen Thread. In einer Stringliste speicher ich die jobs ab.
Wenn ich meine Anwendung beende, möchte ich noch warten bis alle Jobs verarbeitet wurden.
also bis count = 0 ist. Nur irgend wie funzt dat nicht so kanz... (funzt nur mit application.processmessage)

hier mal ein wenig code
Delphi-Quellcode:
  TSqlThread = class(TThread)
  private
    fSQLTimer : TTimer;
    Procedure OnSqlTimer(Sender : TObject);
  public
    Function IsEmpty : Boolean;
  protected
    Procedure Execute; override;
  end;


function TSqlThread.IsEmpty: Boolean;
begin
  result := fSqlList.Count-1 <= 0;
end;

procedure TSqlThread.OnSqlTimer(Sender: TObject);
begin
  if fSqlList.Count-1 >= 0 then
  begin
    fcs.Enter;
    try
      fDB.SQLQuery(fSqlList[0]);
      fSqlList.Delete(0);
    finally
      fcs.Leave;
    end;
    if Assigned(fOnWriteSQL) then
      Synchronize(fOnWriteSQL);
  end;
end;

procedure TSqlThread.Execute;
var
  MSG : TMsg;
begin
  inherited;

  while ( GetMessage(msg, 0, 0, 0) ) do
    DispatchMessage(msg);
end;

// aus meiner main rufe ich bei einem thread diese methode auf.
begin
  if fsql <> nil then
    while not fsql.IsEmpty do
    begin
      sleep(100);

      //muss ich machen weil sonst OnSqlTimer nicht aufgerufen wird..
      application.ProcessMessages; //was aber nicht sein darf
    end;
end;
Wenn ich es ohne application.ProcessMessages mache friert meine main auch ein.
Bzw. der Timer vom SQLThread wird nicht aufgerufen......

Mache ich was falsch?
  Mit Zitat antworten Zitat