Главная страница
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.043 c
14-1127031985
lookin
2005-09-18 12:26
2005.10.09
Бренд и ошибка


14-1126682917
infom
2005-09-14 11:28
2005.10.09
Статистика использования браузеров среди мастеров


1-1126774119
Курдль
2005-09-15 12:48
2005.10.09
Как заставить TDBCtrlGrid принимать на себя фокус при DragDrop?


1-1126650064
kaif
2005-09-14 02:21
2005.10.09
Как получить "оттенок цвета" из RGB?


6-1102146918
6h
2004-12-04 10:55
2005.10.09
Как мне отослать SMS сообщение на сотовый