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

Вниз

Как перехватить момент отключения сетевого кабеля. WM_?????   Найти похожие ветки 

 
Bobby   (2005-09-12 12:10) [0]

Или что-нибудь другое?


 
Digitman ©   (2005-09-12 16:15) [1]

смысл ?


 
Bobby   (2005-09-12 18:07) [2]

База данных. Открыты запросы. Открыты окна. Юзер отключает сеть в трее. Пилец.


 
Bobby   (2005-09-12 18:09) [3]

Кстати начинаю понимать, что выдергивание сетевого разъема и отключении сети через аплет в трее система воспринимает неодинаково. Сижу, копаю...


 
Игорь Шевченко ©   (2005-09-12 18:11) [4]

Bobby   (12.09.05 18:07) [2]


> База данных. Открыты запросы. Открыты окна. Юзер отключает
> сеть в трее


Кнопку Reset ты же все равно не перехватишь. Так стоит ли утруждать себя борьбой с пользователями, вынимающими сетевой кабель ?


 
Bobby   (2005-09-12 18:20) [5]

Стоит. Не часто, но,случается всякое. Ручки шаловливые, уборщицы со швабрами. Проблема в том, что последствия тяжелые. Система, начинает вытворять черте чего. Не все исключения поддаются обработке. Программа ненормально завершается. Бьются настройки и конфигурационные файлы. Я думаю, что предвидеть такие ситуации - хороший стиль. Но мозгов не хватает. Сейчас читаю про WM_DEVICECHANGE, но это относится к отключению устройства. Надо разбираться с физическим выключением кабеля.


 
Ihor Osov'yak ©   (2005-09-12 18:36) [6]

если имеется в виду сетевой в смысле net, а не power, то очень похоже на то, что Вы просто некорректно обрабатываете исключения в коде, поддерживающем сетевые соединения и/или  ответственном  за взаимодействие с сервером базы данных. Вполне возможно, что сюда относятся и операции ввода/вывода, если он осуществляется на сетевые ресурсы.
Либо вообще не обрабатываете.

Имхо, нужно немного изменить идеологию обработки исключительных ситуаций и ошибок ввода-вывода. А не ловить черную кошку в черной комнате.


 
bobby   (2005-09-12 21:03) [7]

Я, увы , грешен и иногда пользуюсь компонентами. ADO, Indy и пр. Это не я обрабатываю, а они. У всего есть свои преимущества и недостатки, если в делфях игнорировать компоненты, так это лучше на C писать - вот где раздолье для ламера. Тема неперехватываемых исключений в Delphi не выдумана. Проблема существует. Создайте новый проект, в нем создайте поток, в нем создайте, к примеру Indy ICMP-клиента - пусть что-нибудь попингует в цикле. А в это время поиграйте с настойками IE, например с Proxy или вырубите сеть на апплете. Это самое простое, с чем столкнулся я. А потом расскажете, как вы обрабатываете исключения в ntdll.dll. Не проще ли поймать уведомление о готовящемся отключении девайса или пропавшем сетевом кабеле? Разберусь если - расскажу...


 
Джо ©   (2005-09-12 21:17) [8]


> Не проще ли поймать уведомление о готовящемся отключении
> девайса или пропавшем сетевом кабеле?

Или о начавшемся потоме в серверной. Или землетрясении в Австрали...


 
Джо ©   (2005-09-12 21:19) [9]


> [7] bobby   (12.09.05 21:03)


> Тема неперехватываемых исключений в Delphi не выдумана.
> Проблема существует

Проблема выдумана. Проблемы не существует.


 
Ihor Osov'yak ©   (2005-09-12 22:29) [10]

> Проблема выдумана. Проблемы не существует.

Подтверждаю.


 
Nick Denry ©   (2005-09-12 23:53) [11]

> Проблема выдумана. Проблемы не существует.

Извините, может я не совсем прав, но:

Проблема существует. Это проблема (как минимум пользователей), просто на программном уровне решить ее практически невозможно, хоть порой и очень хочется.

Я помню еще был вариант с отрубанием пальцев юзерам, но это не полностью программное решение. :)

а вообще-то подсказка где-то в Ihor Osov"yak ©   (12.09.05 18:36) [6], а так же в NTFS и вообще в журналирумых базах данных.


 
simpson ©   (2005-09-13 00:31) [12]

> Bobby   (12.09.05 18:07) [2]
> База данных. Открыты запросы. Открыты окна.
> Юзер отключает сеть в трее. Пилец.

Ну... не знаю. И что? Ну, подошел я сейчас к кассовому терминалу. Отрубил его. Жестко. Ресетом, эксперимента ради. В момент печати чека, в добавок. И соединение с базой было, и окна были открыты.

Ну и нифига тяжелого - ни тебе "левых" данных в базе, ни тебе чека лишнего. Все корректно отработало. Могу поклясться, что никакого мониторинга - подключен или отключен сетевой кабель - у меня нет.

> Проблема в том, что последствия тяжелые

Перечислить можно? Особенно интересны те, которые убивают базу данных. А как же откат транзакций и т.п.? С какой СУБД ведется работа?

Кстати, а зачем постоянно держать открытыми конфигурационные файлы? Это что за необходимость такая? Загрузки настроек в начале работы приложения недостаточно (ну, если очень хочется, то перезагрузки по определнному сигналу)?

> иногда пользуюсь компонентами. ADO, Indy и пр.
> Это не я обрабатываю, а они

Очень плохо, что не ты. Они исключения как раз в большинстве своем не обрабатывают, к счастью. Я думаю, масса людей расстроилась, если бы компоненты сами обрабатывали исключения, и, соответсвенно, сами определяли реакцию твоего приложения.

По сабжу. Как вариант, по таймеру читать состояние сетевых интерфейсов (см. MSDN, IP Helper).

Но, IMHO, очередная проктологическая операция на гладнах.
См. Digitman ©   (12.09.05 16:15) [1].


 
Джо ©   (2005-09-13 01:27) [13]

[11] Nick Denry ©   (12.09.05 23:53)
> просто на программном уровне решить ее практически невозможно

После таких слов чертовски хочется увидеть пример того, как вы пытаетесь решить. Может, как-то не так пытаетесь?


 
Eraser ©   (2005-09-13 01:55) [14]

bobby   (12.09.05 21:03) [7]
иногда пользуюсь компонентами. ADO, Indy и пр


В Indy довольно развит механизм искл. ситуаций.


 
Nick Denry ©   (2005-09-13 13:05) [15]

Джо ©   (13.09.05 01:27) [13]

Я не пытаюсь :)

А как решить проблему пользователя, нажимающего на ресет?

Про пальцы я уже говорил :)


 
WondeRu ©   (2005-09-13 13:57) [16]

год назад задавал этот же вопрос, вот был ответ
Verg ©   (07.09.04 10:50) [2]
Если говорить о сети TCP/IP, то отключение сетевого адаптера немедленно приводит к изменению в маршрутной таблице, разрыву всех установленных через этот интерфейс TCP соединений.
Изменение в маршрутной таблице можно отслеживать ф-цией
function NotifyRouteChange( Handle : PHandle; Overlapped : POverlapped):DWORD; stdcall; external "IPHLPAPI.DLL";
После наступления изменения просмотреть все адаптеры ф-цией
function   GetIfTable(pIfTable : PMIB_IFTABLE; var pdwSize : ULONG; bOrder : BOOL): DWORD; stdcall;external "IPHLPAPI.DLL";
Отключенный адаптер будет иметь состояние
dwOperStatus <> MIB_IF_OPER_STATUS_OPERATIONAL (5)
или
dwAdminStatus <> MIB_IF_ADMIN_STATUS_UP (1)

Только это все полумеры, т.к. связь с сервером БД так же может оборваться из-за множества других причин, а результат один - СУБД не работает.



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

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

Наверх





Память: 0.49 MB
Время: 6.828 c
9-1119861677
Маздай
2005-06-27 12:41
2005.11.13
Падение: Закапываюсь!


3-1128364558
Darkwing
2005-10-03 22:35
2005.11.13
Существует ли исходник BDE, независимый от Delphi и где взять?


14-1129898967
oldman
2005-10-21 16:49
2005.11.13
пятничная задачка...


3-1128062703
magnus
2005-09-30 10:45
2005.11.13
Кодировка БД


8-1118673537
nWind
2005-06-13 18:38
2005.11.13
Сравнение gif ов





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