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

Вниз

Как определить, что приложение зависло?   Найти похожие ветки 

 
AlexVit   (2003-03-04 08:04) [0]

Всем доброго времени!

Проблема такая:
Приложение-процесс работает постоянно, но иногда оно зависает по так и невыясненной причине. Можно ли сделать так, чтобы приложение само определило, что оно повисло (в этом случае я мог бы вставить код выгрузки/загрузки приложения)? Если такой вариант невозможен, то какой есть более-менее простой способ определить из другого приложения что искомая прога висит?

Спасибо за внимание.


 
MBo   (2003-03-04 08:18) [1]

>приложение само определило, что оно повисло
Нет, конечно.


9X - IsHungThread (ThreadId: Thandle): BOOL;
NT, 2K - IsHungAppWindow (Wnd: THandle): BOOL;


 
MBo   (2003-03-04 08:20) [2]

Еще вариант - из одного из потоков процесса посылать SendMessage(TimeOut) подозрительному на зависание потоку, анализировать ответ


 
AlexVit   (2003-03-04 08:33) [3]

To MBo
Спасибо за ответ!

Но вот проблема: не могу найти описание IsHungAppWindow в хелпах Дельфи. Не подскажешь ли, где можно подробнее почитать про эту API-функцию?


 
MBo   (2003-03-04 10:04) [4]

Онп недокументирована. Не знаю, есть ли в MSDN


 
Digitman   (2003-03-04 10:17) [5]

Окну целевого GUI-приложения можно послать сообщение SendMessageTimeout() со взведенным флагом SMTO_ABORTIFHUNG и заданным значением тайм-аута ожидания результата

Результатом будет Win32-ошибка ERROR_TIMEOUT = 1460, если в период времени, не превышающий заданный параметром тайм-аут, контролируемое целевое приложение никак не отреагировало на посланное сообщение


 
Roma   (2003-03-04 10:51) [6]

> MBo © (04.03.03 10:04)

В 2002-Октябрь одна - IsHungAppWindow - уже есть... Но раньше не было, хотя работают начиная с 95-ой... Я сам о них в свое время на каком-то буржуйском форуме прочитал...

AlexVit © (04.03.03 08:33)

А Борландовском хелпе уж точно нет...


 
AlexVit   (2003-03-04 11:16) [7]

To MBo
To Digitman
To Roma

Парни, большое спасибо за ответы!

Буду пробовать...


 
REA   (2003-03-04 12:48) [8]

ИМХО лучше все-же выяснить причину...


 
mmb32   (2003-03-04 13:52) [9]


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/ishungappwindow.asp

Minimum operating systems: Included in Windows 2000


 
AlexVit   (2003-03-05 08:45) [10]

> REA © (04.03.03 12:48)

Я до сих пор пробую разобраться, почему прога виснет.
Назначение этой проги в следующем:
она висит на машине пользователя в круглосуточном режиме и отправляет/принимает данные с оракловского сервера. Отправляемые/принимаемые данные клиентской машины читаются/пишутся в локальные таблицы БД (dbf-формата). С оракловской БД работаю в клиент/серверном режиме через Oracle Provider, используя ADO. С локальной БД работал сначала через BDE - висла, предположил, что проблема с BDE и перешел также на ADO - продолжает виснуть. Связь с сервером идет по радиодоступу (клиентские машины находятся на постах ГАИ, которые на пару десятков км отдалены от города). Трафик приличный, иненсивность обработки данных - около десятка записей в сек. Связь надежная, но иногда рвется, поэтому предусмотрел обход этого дела с обработкой возникающих exceptions при разрыве связи и дальнейшем переподключении к серверу и приему/отправке накопившейся очереди данных. Обработка данных идет паралалельно тремя "потоками" через три таймера.
Прога виснет случайным образом: может несколько дней работать без проблем, а может несколько раз в сутки зависать. Закономерности какой-то пока не выяснил (сами понимаете - на посты не больно-то наездишься, а их всего шесть, выручает RA - удаленный админ, установленный на каждом посту). Все это затрудняет выяснение причин зависания. Что я пробовал: вставил ловушку для любых exceptions (кроме оракловских, которые обрабатываются, как уже сказал, отдельным образом) через OnException - не помогло, так как желанного exception не возникает; ввел протоколирование действий программы в log-файл - помогло только выснить, что Microsoft Provider для ODBC иногда выдает зарезервированную ошибку без описания, но это легко обошел самоперезагрузкой проги; дошел от отчаяния даже до того, что вставил перед каждой строкой кода команду записи номера данной строки в log-файл, чтобы определить после какой строки виснет - тоже ничего не дало, так как зависание обнаруживалось при работе кода разных таймеров, т.е. в разных местах кода.
Может быть, есть какие-то технологии для отладки таких вещей?
Был бы очень рад, если кто-то чего подсказал по этому поводу!

Извиняюсь, что сумбурно изложил, если кого заинтересуют подробности, пишите - сообщу.


> mmb32 (04.03.03 13:52)
Премного благодарен за ссылку, щас посмотрю!


 
REA   (2003-03-05 10:12) [11]

Как бы я подошел к проблеме: локальная БД в принципе все равно какая (только не ODBC - не люблю я его) - у всех есть недостатки. Для пересылки пакетов данных использовал FTP протокол - он с докачкой, правами доступа и т.п. Для пересылки realtime данных наверно свой протокол (100мс не слишком большой траффик, хотя смотря сколько данных).

>Прога виснет случайным образом: может несколько дней работать без проблем, а может несколько раз в сутки зависать.

В чем выражается зависание? Например MS Windows не ограничивает файловый кэш и при записи в таблицу несколько суток будет забиваться ОЗУ и свап до полного ступора.


 
AlexVit   (2003-03-05 11:48) [12]

> только не ODBC - не люблю я его
а какие более надежные альтернативы можешь посоветовать?

> Для пересылки пакетов данных использовал FTP протокол -
> он с докачкой, правами доступа и т.п. Для пересылки realtime
> данных наверно свой протокол (100мс не слишком большой траффик,
> хотя смотря сколько данных).
Поначалу похожим образом и предполагалась работа: через TCP/IP-протокол, мой шеф навязывал TCP/IP-навроченные и сложные библиотеки фирмы-партнера, которые к тому же требовали создание дополнительных модулей на стороне сервера. Появляется доп. звено, которое по времени вообще некогда было писать и тестировать, поэтому пришлось обойтись прямым подключением к БД, благо что Oracle client все равно шлет запросы в виде TCP/IP-пакетов.

> В чем выражается зависание?
В том, что данные перестают приниматься/передаваться клиентом; когда в этом случае пробуешь вызвать процесс (его окно), ни какой реакции на позывы мыши от процесса не происходит, то бишь повис, родной. Пробовал ждать (долго ждать), думал, занято приложение обработкой данных, но в нормальном (не зависшем) режиме Popup Menu выскакивает сразу же в ответ на щелканье мыши.

При этом никакой видимой запредельной загрузки ОЗУ не происходит, и другие процессы и приложения (тоже относящиеся к этой же системе) работают без проблем сколько угодно времени.

Уже пару месяцев бьюсь...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.03.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.015 c
14-54281
Sergey13
2003-02-28 17:39
2003.03.17
Бывают чудеса на свете


3-53890
DieM@N
2003-02-22 04:19
2003.03.17
Не открывается DBF-ник!!!


3-53885
Geka
2003-02-25 10:19
2003.03.17
SQL и триггер


14-54195
maxtaran
2003-03-03 05:56
2003.03.17
HELP SOS HELP помогите разобраться с системным треем


14-54210
Aleksandr
2003-03-03 10:15
2003.03.17
Программы подолгу инициализируются. Отчего это зависит?





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