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

Вниз

Как "безусловно" уничтожить поток?   Найти похожие ветки 

 
Aleksandr.   (2004-06-17 14:23) [0]

Есть потомок от TObjectList, управляющий потоками. Каждый поток обращается к "закрепленной" за ним таблице Парадокса. При этом есть одна проблема - если в БДЕ при работе какого-то из потоков произошел сбой, то при попытке уничтожить поток и создать новый намертво умирает сам менеджер потоков. Код:


// этот метод должен убить сбойный поток и запустить новый
procedure TTblThreadManager.ResetTable(IDT: word);
var
 A : TThreadTable;
begin
FResetCS.Enter;
try
 try
   A:=Tables[IDT];
   if Assigned(A) then begin
     try
       if A.Suspended then
         A.Resume;
       A.Terminate
     finally
       FTables.Delete(FTables.IndexOf(A));
       A:=TThreadTable.Create(IDT);
       A.Resume
     end
   end
 except
   on E:Exception do
     LogDBError(IDT,"ResetTable: "+E.Message)
 end
finally
  FResetCS.Leave
end
end;

// а это дестрактор табличного потока

destructor TThreadTable.Destroy;
begin
 StoreCashedData;
 FreeAndNil(FQueryList);
 FreeAndNil(FQueryCS);
 FreeAndNil(FUpdateList);
 FreeAndNil(FUpdateCS);
 FreeAndNil(FPXUpdator);
 inherited
end;


Сбой БДЕ случается в объекте FPXUpdator, занимающимся конвертацией таблицы с MS SQL Server в Paradox, но он при трассировке в дестракторе уничтожается благополучно, а вот на строке Inherited трассировка заканчивается и менеджер потоков больше на запросы не реагирует (даже не выходя в finally). Попытка расстрассировать Inherited успеха не имеет - там какие-то экспорты в модуле Windows начинаются. Что может вызывать такой сокрушительный сбой или хотя бы как можно удалить поток без такого вывеса?


 
default ©   (2004-06-17 14:34) [1]

TerminateThread по-моему


 
TUser ©   (2004-06-17 16:07) [2]

Да. Он прибьет поток (виндовский). А объект потом, наверное, надо будет уничтожить самому.


 
Aleksandr.   (2004-06-18 11:58) [3]

Спасибо! А что ему в параметр ExitCode загонять?


 
Петров Денис ©   (2004-06-18 13:17) [4]

> default ©   (17.06.04 14:34) [1]

Чтобы вызывать TerminateThread, нужны ОЧЕНЬ веские основания. Все, что рассказывает автор темы, на это явно не тянет.

> Aleksandr.   (17.06.04 14:23)

Речь, насколько понимаю, идет о некоем конверторе данных из одного формата в другой. Сама по себе фраза "этот метод должен убить сбойный поток и запустить новый" вызывает массу вопросов типа "нафига?"

Уж не пытаешься ли ты обрабатывать каждую таблицу в отдельном потоке? Если да, то представь, что таблиц, например, 100. Открой диспечер задач, и посмотри, у какого из процессов число потоков хотя бы приближено к сотне? Если это попытка достичь быстродействия, то она, мягко говоря, неудачна.

Почему бы не определить причину возникновения загадочной ошибки BDE?



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

Форум: "Основная";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.034 c
1-1087462750
MeF88
2004-06-17 12:59
2004.07.04
Преимущества property


4-1085377670
vint1978
2004-05-24 09:47
2004.07.04
Как узнать серийные номера сетевой карты и видеокарты программно?


1-1087913598
Stein
2004-06-22 18:13
2004.07.04
Анализ гипертекста


14-1087214449
Real
2004-06-14 16:00
2004.07.04
Использование программирования в жизненных задачах


4-1085497733
Elast
2004-05-25 19:08
2004.07.04
Установка FB 1.5





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