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

Вниз

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 вся ветка

Форум: "Corba";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.014 c
14-1126934091
guesst
2005-09-17 09:14
2005.10.09
fastreport


14-1126591201
REA
2005-09-13 10:00
2005.10.09
День программиста


1-1126732753
Чебуратор
2005-09-15 01:19
2005.10.09
Снов StringGrid... :-)


2-1125158518
kami
2005-08-27 20:01
2005.10.09
TButton не меняет Font.color


14-1127221417
oldman
2005-09-20 17:03
2005.10.09
Да здравствует Российский женский большой теннис!!!





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