Mam problem z aplikacją wielowątkową w Delphi 2009. Aplikacja działa pod kontrolą systemu operacyjnego Windows XP Professional.
Problemem jest to, że po kilku godzinach aplikacja się zawiesza i generowany jest błąd "Out of memory". Ogólnie w aplikacji wykorzystuję tworzenie wątków kilka razy i zamykanie ich. Oto fragment kodu źródłowego, który moim zdaniem wywołuje błąd:
pom := TPomiarRE72Watek.Create(self);
repeat until (SecondsBetween(Now, CzasPocz) > 3) or (Number_Bytes_Read > 0);
if Number_Bytes_Read = 0 then
TerminateThread(pom.Handle, 0);
Czyli czekam chwilę aż wątek się zakończy, a jeśli nie to przerywam go ręcznie.
Oto kod wątku:
unit PomiarRE72Watek;
interface
uses
Classes, Regulator_RE72;
type
TPomiarRE72Watek = class(TThread)
private
FRegulator_RE72 : TRegulator_RE72;
protected
procedure Execute; override;
public
constructor Create(regulator : TREgulator_RE72);
end;
implementation
uses Windows;
constructor TPomiarRE72Watek.Create(regulator : TREgulator_RE72);
begin
inherited Create(False); // wywołanie wątku
FRegulator_RE72 := regulator; // przypisanie wartości do zmiennej
end;
procedure TPomiarRE72Watek.Execute;
begin
FreeOnTerminate := True;
ReadFile(FRegulator_RE72.hCommDev, FRegulator_RE72.aBuforWej, FRegulator_RE72.iloscBitowDoOdczytu, FRegulator_RE72.Number_Bytes_Read, NIL);
end;
end.
Wychodzi więc na to, że jeżeli wątek się wykona to powinien zwolnić pamięć, a jeżeli nie to zakańczam wątek z głównego wątku. ten wątek uruchamiany jest co 2 minuty, więc może nie zwalnia tej pamięci i stąd powstaje błąd "out of memory" po pewnym czasie?
Proszę o sugestie.