Форум: "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