![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
2.35 bug tthread [Delphi, Windows]
grm © (2006-05-16 14:14:00)в деструкторе нити (KOL) вызывается waitfor, который вызывает еще раз деструктор, закрывает дескриптор нити, и при возвращении падаем на CloseHandle(FHandle);
попробовал обнулить после закрытия дескриптор для корректной работы, но получаем дальше ошибку особождения памяти. судя по всему весь алгоритм зачем-то сильно исказили в последнее время...
в версии 2.33 такого не было.
destructor TThread.Destroy;
begin
if not FTerminated then
begin
Terminate;
> WaitFor;
end;
if (FHandle <> 0) then
begin
CloseHandle(FHandle);
end;
inherited;
end;
function TThread.WaitFor: Integer;
begin
RefInc;
Result := -1;
if FHandle = 0 then Exit;
WaitForSingleObject(FHandle, INFINITE);
GetExitCodeThread(FHandle, DWORD(Result));
> RefDec;
end;
mdw (2006-05-16 14:26:00) [1]В ветке http://www.delphimaster.ru/cgi-bin/forum.pl?id=1145208691&n=10обсуждали.
Я Кладову писал, но он интереса не проявил. Там что-то с RefCount напутано, примерно в версии 2.33 он и изменил обработку. Варианта два: подождать или использовать OLD_REFCOUNT. Я жду пока, юзаю 2.30.