Главная страница
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.027 c
4-1123770298
NightLord
2005-08-11 18:24
2005.10.09
Обои в винде


1-1126854574
Новичок1
2005-09-16 11:09
2005.10.09
Уважаемые Доны подкажите пожалуйста как можно сделать


1-1126788890
Дмитрий_05
2005-09-15 16:54
2005.10.09
Плагин к Oper-е


14-1127292597
vajo
2005-09-21 12:49
2005.10.09
Тормоза в винде


1-1127308327
ktt
2005-09-21 17:12
2005.10.09
Импорт xml файла