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

Вниз

DCOM-клиент и поток   Найти похожие ветки 

 
Rext   (2004-12-16 16:06) [0]

Добрый день!
  Дано: трех звенная архитектура (Oracle server, сервер приложений, клиент); сервер приложений с клиентом общаются по DCOM. Клиент формирует запрос (select ла-ла-ла...) в отдельном потоке и передает его серверу приложений для исполнения.
  Вопрос: как убить поток, если запрос "завис"?
Вызов из программы процедуры Destroy для потока, приводит к "зависанию" программы, т.е. при отработке Destroy поток честно дожидается окончания работы переданного запроса. Может есть возможность передавать запрос таким образом, что бы не загручать поток?
  При создании сервера выбраны MultiInstance и Free.

Прошу прощения за возможную сумбурность, но уже 3-ий день с этой проблемой тра.юсь ...


 
Cobalt ©   (2004-12-16 23:39) [1]

TerminateThread
+ PSAPI/ToolHelp для получения хендла (если я, конечно, ничего не напутал)


 
Кролик Енерджайзер   (2004-12-17 16:59) [2]

<offtop>
Ох ничего себе. Клиент селекты шлёт. Ладно бы имена хранимых процедур. Но и то не лучшее решение. Клиент вообще ничего не должен знать об SQL. Рекоммендую статью

"Application Architecture for .NET: Designing Applications and Services" из MSDN раздел Designing Data Layers.

</offtop>

Проблема зависания - это issue. Я бы пересмотрел необходимость использования этого сервера приложений.


 
Rext   (2004-12-20 08:46) [3]

to Cobalt ©
  TerminateThread - это не лучший выход. Как я понимаю, после него не будет освобождена память, остануться не выгруженнымим dll и т.д.

to Кролик Енерджайзер
  Посылать имена процедур у меня не получитья. Пишется приложение типа TODA, т.е. в котором пользователь сам пишет произвольные скрипты на выбор данных из базы.

Если есть конструктивные мысли, как ЭТО сделать более умно, то с радостью приму к сведению, т.к. с DCOM-мом знаком не долго ;) .


 
Cobalt ©   (2004-12-20 23:12) [4]

2 Rext   (20.12.04 08:46) [3]
>  TerminateThread - это не лучший выход. Как я понимаю, после него не будет освобождена память, остануться не выгруженнымим dll и т.д.
Ситуация, в которой обращение к БД может "зависнуть" является чрезвычайным.
Предлагаю исходить из этого положения, и, соответственно, не допускать "зависания" потока.
Т.е. отлаживать архитектуру. Название статьи тебе уже написали :)


 
Slym ©   (2005-01-14 05:15) [5]

Поток должен отлавливать таймауты!
А слабо корректно TimeOut у датасетов настроить?
или
Поставить Async выполнение и в самом потоке ждать тайм аута
типа (WaitableTimer или Event на конец выполнения+ WaitFor(TimeOut))...
Если запрос идет больше минуты (НА СЕРВАКЕ!!!) можно с вероятностью 95% утверждать что он завис.

А если юзер сам пишет запрос: время подумать о конструкторе запросов, который имеет в своем запасе корректные кубики и из них строить. Т.е свобода в рамках разумного!


 
Кролик Енерджайзер   (2005-01-14 13:55) [6]

2 Slym:
Да точно, а потом TerminateThread и огрести вагон ликов :)



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

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

Наверх




Память: 0.48 MB
Время: 0.042 c
1-1126971832
DimDim
2005-09-17 19:43
2005.10.09
Модальное окно "прячется" за основную форму ???


3-1124784690
_alex_niv_
2005-08-23 12:11
2005.10.09
Ошибка при чтении данных


2-1125735542
Ксардас
2005-09-03 12:19
2005.10.09
Как выделить строку в РичЭдите при опр условиях?


6-1118869933
GEEK
2005-06-16 01:12
2005.10.09
Как проверить доменное имя?


14-1126773985
SergProger
2005-09-15 12:46
2005.10.09
Файловая система