Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.03;
Скачать: CL | DM;

Вниз

Истчо один баг в Делфи?   Найти похожие ветки 

 
Aleksandr   (2003-02-20 11:49) [0]

У меня некоторые потоки при уничтожении подвешивались. Начал трассировать такие потоки, вышел на код в Classes:

destructor TThread.Destroy;
begin
if (FThreadID <> 0) and not FFinished then
begin
Terminate;
if FCreateSuspended then
Resume;
WaitFor;
end;
{$IFDEF MSWINDOWS}
if FHandle <> 0 then CloseHandle(FHandle);
{$ENDIF}
{$IFDEF LINUX}
// This final check is to ensure that even if the thread was never waited on
// its resources will be freed.
if FThreadID <> 0 then pthread_detach(FThreadID);
sem_destroy(FCreateSuspendedSem);
{$ENDIF}
inherited Destroy;
FFatalException.Free; //вот про эту строчку я сообщаю
RemoveThread;


Так вот, подвисающие потоки в указанной строчке FFatalException имеют nil. Отсюда и вывес. Объясните мне, это баг Делфи или этот FFatalException всегда должен иметь значение, что Борланд так уверен в его уничтожении? Я что-то не нашел его обязательной инициализации...


 
Smashich   (2003-02-20 11:51) [1]

из той же VCL....

procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;


 
Anatoly Podgoretsky   (2003-02-20 11:55) [2]

Баг не там.


 
Aleksandr   (2003-02-20 12:00) [3]

2 Smashich:

При чем тут метод TObject? Обращение к методу/свойству уничтоженного/несуществующего объекта само по себе вызывает ошибку доступа.


 
Smithson   (2003-02-20 12:05) [4]

Нет, не вызывает. Ты путаешь методв и поля объекта. Обращение к полям несуществующего объекта вызывает ошибку. Обращение к методам - только если внутри этих методов есть обращения к полям или параметру Self без котнроля.
Для примера, выполни следующий код:
TObject(nil).Free
PS За пример не бить, но так ему мозги прочистит!


 
Игорь Шевченко   (2003-02-20 12:06) [5]

Aleksandr © (20.02.03 12:00)

> При чем тут метод TObject? Обращение к методу/свойству уничтоженного/несуществующего
> объекта само по себе вызывает ошибку доступа.


Где такая трава растет ?


 
Dms   (2003-02-20 12:08) [6]

Почему ? Твои методы - простые процедуры, которые никуда не деваются из памяти при уничтожении объекта.


 
Aleksandr   (2003-02-20 12:10) [7]

Понял. Тогда какого икса на этом пункте у меня выскакивание из метода происходит?


 
Smashich   (2003-02-20 12:10) [8]

2 Aleksandr ©

интересно а в чем по твоему смылс метода Free? пачему не Destroy вызывать? не думал никогда об этом?


 
Smashich   (2003-02-20 12:11) [9]

икс надо в другом месте искать! в коде процесса над полагать


 
Aleksandr   (2003-02-20 12:17) [10]

Хорошо, с объяснением метода понял. Тогда поставлю вопрос иначе: от чего может зависеть то, что компилятор при трассировки показывает исключительную ситуацию на этой строчке, а не на той, на которой (вероятно), есть ошибка? Метод Inherited Destroy у моих подвисающих потоков вызывается в дестракторе последним. По F7 я выхожу в указанный код, трассирую до данного пункта, после чего на RemoveThread он уже не выходит.


 
Smashich   (2003-02-20 12:28) [11]

без кода я навряд ли могу предположить чего нить


 
Dms   (2003-02-20 13:21) [12]

При работе с потоками такие глюки вылазять только в путь ... Надо код смотреть.



Страницы: 1 вся ветка

Текущий архив: 2003.03.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.007 c
1-5511
Tornado
2003-02-20 19:07
2003.03.03
Про INI-файлы, помогите


1-5544
bkv
2003-02-21 12:01
2003.03.03
Где можно взять документацию по работе с закладкой Servers в Delp


14-5747
jen_bond
2003-02-16 10:20
2003.03.03
Автозапуск для cd-rom.


1-5618
Альф
2003-02-20 09:38
2003.03.03
Почему не удается послать сообщение LB_SETTABSTOPS ???


14-5792
Krionix
2003-02-12 16:10
2003.03.03
компонент для отображения документа MSWord в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский