Mam osobny wątek (obiekt klasy pochodnej od TThread), który musi tworzyć dynamicznie wątki, przekazywać do procedury je obsugującej zmienną i dalej zajmować się swoimi sprawami. Robię to tak:
procedure Read(cRecord :Pointer); stdcall;
var
CurrentRecord :WORD;
procedure CloseAll;
begin
...
ExitThread(0);
end;
begin
CurrentRecord := Integer(cRecord);
if CurrentRecord=0 then ...
else ...
...
CloseAll;
end;
procedure TObserver.Execute;
begin
while not Terminated do
begin
if elrReader.Wait then
begin
CurrentRecord := elrReader.GetCurrentRecord;
CreateThread(nil,20,@Read,Pointer(CurrentRecord),0,ThreadID);
PThread := Pointer(TReaderPrinter.CreateReader(CurrentRecord,false));
elrReader.MoveToEnd;
end;
end;
end;
No i tu problem... Program kompilowany jest na Windows 2003 Server (tam też chodzi bez zarzutów), jednak po uruchomieniu go na Windows XP wszystko się sypie... Działa zupełnie losowo, potrafi każde zadanie w funkcji Read wykonywać koszmarnie długo (wyniki wypluwam to TMemo na głównym formularzu), aż do wystąpienia będu krytycznego i zamknięcia aplikacji. Jeśli usunę stdcall, to wszystki działa szybko, tyle, że wartość CurrentRecord nie jest przekazywana (ma wartość nil).
O co chodzi?