Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с отлавливанием останова 
:(
    Опции темы
dreaktor
Дата 18.1.2006, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.1.2006

Репутация: нет
Всего: нет




Идея:

Страница, вызванная с определенными параметрами в querystring создает объект некого класса, внутри которого начинает выполняться поток (один поток на один объект). Сразу после создания объект этого класса передается в статичный массив, объявленный в Global.asax и обработка запроса завершается.
В случае завершения приложения, оно отлавливает останов, шлет запрос php-скрипту, который через 5 секунд шлет обратный запрос, чтобы создать новое приложение взамен старому.

Наблюдаем:

При запросе страницы приложение запускается и поток внутри объекта, находящегося в статичном массиве начинает стабильно работать. После 1-3 х часов работа потока внезапно прекращается, а никаких событий останова не отлавливается. Ловил с помощью метода Application_End().

Вопрос:

В чем проблема? Нормально ли такое "тихое" завершение запущенных из приложения потоков?
PM MAIL   Вверх
arilou
Дата 18.1.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



dreaktor
Честно говоря, не знаю, должна ли вообще корректно работать такая штука. Если мне нужен постоянно работающий поток в веб-приложении, независимый от реквестов, я юзаю HttpModule.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
dreaktor
Дата 18.1.2006, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.1.2006

Репутация: нет
Всего: нет



Очень дельный совет, если бы только ты объяснил поподробней, как бы ты стал реализовать это с помощью HttpModule. Передать объект, внутри которого выполняется поток, внутрь подключенного к приложению модуля?
PM MAIL   Вверх
arilou
Дата 18.1.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



dreaktor
Идея такая: создается HttpModule, который при инициализации запускает поток, ответствуенный за выполнение асинхронных операций. Для управления этим HttpModule создается singleton класс. В него добавляется метод Execute(IOperation op). Этот метод помещает op в очередь, которая обрабатывается созданным потоком:

Код

// поточный метод
while(true)
{
  if(!queue.IsEmpty)
    process(queue.Dequeue());

  sleep(300);
}


IOperation - общий интерфейс для всех асинхронных операций. В твоем примере это код, который выполняется внутри "одного потока на один объект".

Примерно так. Пиши, если есть вопросы.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
dreaktor
Дата 19.1.2006, 04:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 17.1.2006

Репутация: нет
Всего: нет



О, теперь у меня много вопросов:

Цитата

cоздается HttpModule, который при инициализации запускает поток, ответствуенный за выполнение асинхронных операций


Как я понимаю, создается поток для управления остальными потоками?

Цитата

Для управления этим HttpModule создается singleton класс.


Объясни пожалуйста, что есть "singleton класс"?

В результате многих попыток привести программу к работающему виду, у меня создалось впечатление, что проблема в том, куда поместить этот самый объект с потоком, чтобы он мог выполняться сколь угодно долго или, на худой конец, приложение могло бы нормально отлавливать свое завершение. Потому что в данный момент работает все, за исключением отлавливания завершения. Насколько далеки от истины мои догадки?

Еще была идея: внутри потока, возможно, накапливаются данные и в результате длительного выполнения кончается память, выделенная мне хостингом.
Возможно ли аварийное завершение приложения в таком случае без вызова соответствующего события?
PM MAIL   Вверх
arilou
Дата 19.1.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Цитата(dreaktor @ 19.1.2006, 04:05 Найти цитируемый пост)

Объясни пожалуйста, что есть "singleton класс"?

http://www.rsdn.ru/article/patterns/singleton.xml

Цитата(dreaktor @ 19.1.2006, 04:05 Найти цитируемый пост)

Как я понимаю, создается поток для управления остальными потоками?

Да, именно. Создание каждого нового потока инкапсулируется в класс, реализующий IOperation.

Цитата(dreaktor @ 19.1.2006, 04:05 Найти цитируемый пост)

куда поместить этот самый объект с потоком, чтобы он мог выполняться сколь угодно долго

HttpModule, потому что только он в веб-приложении работает независимо от request/response.

Цитата(dreaktor @ 19.1.2006, 04:05 Найти цитируемый пост)

нормально отлавливать свое завершение

Боюсь, что в случае аварийного останова, как ты понимаешь, ничего не получится. Наверное, мониторить нужно не изнутри проги, а снаружи smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.