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?