'loha Folks,
auf einem Formular befindet sich ein Timer, welcher bei jedem Interval überprüft ob ein bestimmter Thread noch lebt oder nicht. Je nach Thread-Status führt der Timer dann bestimmte Methoden aus. Nun ist es so, dass ich dem Thread beim kreieren mitteile dass er sich selber freigeben soll, wenn er seine Arbeit vollendet hat (FreeOnTerminate := True). Leider scheint der Thread sich aber niemals terminieren zu wollen, obwohl er zweifelsfrei bereits allen Code abgearbeitet hat (wenn ich am Ende des Threads z.B. noch ein Beep hinsetzte, so ertönt dieses stets). Im Timer, in welchem überprüft wird ob der Thread noch lebt, heisst es aber stets, dass Terminated = False sei, der Thread also noch nicht wirklich terminiert ist. Nachfolgend noch ein bisschen Code, wobei ich dazu sagen muss, dass auch wenn alles bis auf die erste Zeile auskommentiert ist, der Thread schon nicht mehr terminiert. Weiss jemand Rat?
Delphi-Quellcode:
procedure TReadNewKeyThread.Execute;
var
ReceivedCode, SmallestCode, NumberCode: String;
begin
ReceivedCode := DI.ReadNewKey(FUserSession.DataSet.FieldByName('Address').Value);
if ReceivedCode <> '-1' then
begin
SmallestCode := IntToHex(DI.FindSmallestCode(HexToInt(ReceivedCode)), 16);
NumberCode := DI.ConvertCodeToUniqueNumber(SmallestCode);
IWServerController.SearchKeyCode(SmallestCode);
if IWServerController.ADODataSet_Key.RecordCount <> 0 then
begin
if FUserSession.UserLanguage = 'deCH' then FUserSession.ShowMessage := 'Fehler: Der Schlüssel mit der Nummer ' + NumberCode + 'wurde bereits in der Datenbank erfasst'
else if FUserSession.UserLanguage = 'enUS' then FUserSession.ShowMessage := 'Failure: A key with the number ' + NumberCode + ' already exists in the database';
ReadKeyVisible := False;
end
else
begin
KeyCode := SmallestCode;
KeyNumber := NumberCode;
ReadKeyString := KeyNumber;
if KeyNumber <> '00000000000000' then
begin
ReadKeyEnabled := True;
ReadKeyVisible := True;
end;
end;
end
else
begin
ReadKeyString := '';
ReadKeyEnabled := False;
ReadKeyVisible := False;
end;
end;
Grüsse
hirnstroem