Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
14-5772
professor
2003-02-16 20:10
2003.03.03
Обучение


14-5831
Zhenka
2003-02-13 15:42
2003.03.03
Помогите с алгоритмом вычисления полинома


1-5636
Ozone
2003-02-20 13:35
2003.03.03
Компоненты RUN-TIME


7-5885
AlexT1000
2003-01-03 20:03
2003.03.03
Путь к dll в систему!?


8-5669
JibSkeart
2002-11-21 18:06
2003.03.03
Кто нибуть работал с частичками(particles) в DirectX





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский