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

Вниз

Зависает программа при использовании EventAlerter   Найти похожие ветки 

 
akss ©   (2008-12-08 15:43) [0]

Такой вопрос - не у кого не возникало проблем при регистрации событий
в TSIBfibEventAlerter? У меня при регистрации события в
TSIBfibEventAlerter иногда зависает программа(иногда потом развисает
но чаще нет), частота зависания примерно 1 к 4 или к 3 примерно. Делаю
всё по примеру FibPlus5 и при этом в примере с тестовой базой всё в
порядке, но когда я и его подключаю к рабочей только для прослушки
событий, то и он зависает!!! мож кто сталкивался с этим багом.

Заметил что зависания появляются чаще если количество подключений к БД
увеличивается(т.е С утра пока не кто не работает зависает 1 раз
примерно за 7-10 запусков, а днём почти каждый второй запуск приводит
к зависанию, или даже чаще)

Нашёл конкретное место зависания в модуле IB_Intf это функция


function TIBClientLibrary.isc_que_events(status_vector: PISC_STATUS;
db_handle: PISC_DB_HANDLE; event_id: PISC_LONG; length: Short;
event_buffer: PChar; event_function: TISC_CALLBACK;
event_function_arg: PVoid): ISC_STATUS;
begin
if Assigned(Fisc_que_events) then
Result:= Fisc_que_events(status_vector, db_handle,event_id,
length, event_buffer, event_function, event_function_arg
)
else
raise
EAPICallException.Create(Format(SCantFindApiProc,
["isc_que_events",FLibraryName]));
end;


и на строчке


Result:= Fisc_que_events(status_vector, db_handle,event_id,
length, event_buffer, event_function, event_function_arg
)


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

Delphi7, Firebird 2.0, FibPlus5


 
Сергей М. ©   (2008-12-08 15:49) [1]


> этот момент происходит регистрация события как объекта


В каком потоке ?


 
Сергей М. ©   (2008-12-08 15:49) [2]


> этот момент происходит регистрация события как объекта


В каком потоке ?


 
akss ©   (2008-12-08 16:05) [3]


> В каком потоке ?


Это происходит не в потоке, это при вызове метода  FIBEvent.RegisterEvents;
он тупо иногда зависает (вернее часто).


 
Сергей М. ©   (2008-12-08 16:08) [4]


> Это происходит не в потоке


В Win32 ничто не может происходить "не в потоке".


> при вызове метода  FIBEvent.RegisterEvents


В каком потоке ?


 
akss ©   (2008-12-08 16:23) [5]

я что-то  не совсем понял ну ладно, опишу подробнее:
При запуске проекта на OnCreate формы происходит соединение с БД, на событие
AfterConnect
у
TpFIBDatabase
происходит добавление событий в список событий у компонента
TSIBfibEventAlerter
FIBEvent.Events.Add("event1");
после того как все события, которые необходимо прослушивать от сервера, добавлены, происходит их регистрация для активации прослушки. Вроде так.


 
Сергей М. ©   (2008-12-08 16:32) [6]

Значит в основном потоке.

У тебя, похоже, проблема с сетевыми настройками.


 
akss ©   (2008-12-08 22:36) [7]

С настройками всё в порядке, ведь программа работает отлично когда я не регестрирую события, просто тогда они не отлавливаются и не запускается их обработка(((


 
Сергей М. ©   (2008-12-09 08:32) [8]


> С настройками всё в порядке


Ну тогда тряси бубен.
Мое хо неизменно - следует внимательно изучить сетевую среду, в которой функционирует сервер и клиент.
Можешь хотя бы ради эксперимента изменить способ подключения (TCP/IP, NetBIOS, IPX/SPX, MMF для локальной среды) - наверняка ситуация радикально изменится.


 
akss ©   (2008-12-09 11:35) [9]

Спасибо посмотрю, а ты говорил про


> В каком потоке ?


ка лучше в основном или в отдельном потоке производить регестрацию - раз уж ты спросил в каком у меня, скажи как лучше и как ты делаешь :-), да и какие вообще есть подводные камни в использовании событий БД - в компонентах FibPlus5


 
Сергей М. ©   (2008-12-09 11:45) [10]


>
> ка лучше в основном или в отдельном потоке производить регестрацию


По барабану.
Потоки нельзя равнивать по критерию "лучшести".


> какие вообще есть подводные камни в использовании событий
> БД - в компонентах FibPlus5


Надо смотреть исх-ки.
В IBEvents, например, подписка на события осущ-ся в доп.потоке, а нотификация о событиях осущ-ся с использованием TThread.Synchronize, со всеми вытекающими из этого последствиями.


 
akss ©   (2008-12-09 11:54) [11]

Спасибо посмотрю, а ты говорил про


> В каком потоке ?


ка лучше в основном или в отдельном потоке производить регестрацию - раз уж ты спросил в каком у меня, скажи как лучше и как ты делаешь :-), да и какие вообще есть подводные камни в использовании событий БД - в компонентах FibPlus5


 
akss ©   (2008-12-09 11:56) [12]

Ещё раз спасибо (сори за мусор)


 
Dimitry Sibiryakov   (2008-12-09 21:05) [13]

То, что ты видишь "зависание" на isc_que_event - ничего не значит, поскольку примерно в это время асинхронно приходит первое извещение о текущем состоянии счётчиков. Соответственно - вызывается ast. Но ты этого не видишь, поскольку оно происходит в другом потоке. Что там эта ast делает у SIB алертера - мне не видно, да и неинтересно. А она может делать всё что взбрело в голову её автору, включая всякую фигню с критическими секциями и сообщениями.

Моё резюме: если можешь обойтись в программе без эвентов - обойдись. Поскольку ни один компонент, который я видел, не работает с ними нормально. И моё (отнюдь не скромное) мнение - такой (универсальный) компонент вообще невозможен именно вследствие невыполнимого требования универсальности.


 
akss ©   (2008-12-10 08:48) [14]

А что насчёт портов??? в Firebird кажися нужно открывать для событий отдельный порт???
Да и если кто знает что нужно править в исходниках то скажите плиз  или у кого то уже есть правленные дайте ПЛИЗ


 
Сергей М. ©   (2008-12-10 10:01) [15]


> что насчёт портов?


Для рассуждений о портах необходимо сначала обозначить протокол, по которому клиент взаимодействует с сервером.


 
akss ©   (2008-12-10 10:53) [16]

tcp/ip


 
Сергей М. ©   (2008-12-10 12:26) [17]


> Firebird кажися нужно открывать для событий отдельный порт?


Да. На стороне сервера.
Соответственно требуется должная доп.настройка межсетевых экранов/брендмауеров/файрволов (если таковые имеются) на обеих сторонах потенциального соединения.


 
PEAKTOP ©   (2008-12-11 15:41) [18]

> Да и если кто знает что нужно править в исходниках то скажите плиз

В исходниках Firebird ? ню-ню...

 или у кого то уже есть правленные дайте ПЛИЗ

Даже у меня править сырцы Firebird (несмотря на Automated snapshots builds на моем сервере) рука не поднимается... :)


 
Сергей М. ©   (2008-12-11 16:14) [19]


> править сырцы Firebird.. рука не поднимается


Да собссно ничего страшного в этом нет, если интерес искл-но спортивный)
По кр.мере FB 1.0 я успешно правил и собирал. Но тогда у меня был далеко не спортивный интерес)


 
PEAKTOP ©   (2008-12-11 23:02) [20]

>Да собссно ничего страшного в этом нет, если интерес искл-но спортивный
Ага. Особенно если потом весь sql.ru спамит в случае, если очередной еженочный снапшот глюкнулся. Ну, бувает такое: разрабочик создал новый файл, потом синхронизировал *.vcporj с хранилищем и между этими двумя действиями вклинился мой бот, который естественно не смог собрать снапшот со старым *.vcproj.

> По кр.мере FB 1.0 я успешно правил и собирал.
Ну-у-у. С той поры много чего поменялось.

>Но тогда у меня был далеко не спортивный интерес
Понятное дело, не от избытка пива ты туда полез же... Особенно умиляют душу старые бэкдоры от IB6, типа political/correctly :) Мну тоже тогда (2002 год) паранойя мучала.


 
Сергей М. ©   (2008-12-12 09:29) [21]


> не от избытка пива ты туда полез же


Эт точно)
Приспичило тогда крепко - ни в одном из IB-совместимых продуктов не было дельфийского аналога raise;
Однако начиная с полуторки и поныне в FB PSQL присутствует статья EXCEPTION без параметров, которая мне была тогда позарез нужна. Опробованная локально эта "идея-фикс" в конце-концов (после долгих препирательств с Кузьменко) была таки поддержана Емановым и включена в первый релиз-кандидат полуторки.


 
akss ©   (2008-12-12 15:15) [22]


> В исходниках Firebird ? ню-ню...

Не в исходниках Firebird, а в исходниках FibPlus5


 
Виталий Панасенко   (2008-12-12 15:40) [23]

Попробуй использовать Фибы 6.7


 
akss ©   (2008-12-13 00:37) [24]

Не могу, основной проект на них переделывать не будем ради только одного момента, и вообще наверно не скора перейдём((( так что нужно разобраться с этим багом



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

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

Наверх





Память: 0.51 MB
Время: 0.008 c
15-1252044372
Дмитрий С
2009-09-04 10:06
2009.11.01
Где ошибка в настройке mod_rewrite?


15-1251979701
stas
2009-09-03 16:08
2009.11.01
Размер скачиваемого файла


15-1250747781
Медвежонок Пятачок
2009-08-20 09:56
2009.11.01
Первый канал отжигает


15-1251776745
VillVET
2009-09-01 07:45
2009.11.01
Экран приветствия


2-1252659912
Mery
2009-09-11 13:05
2009.11.01
TIBQuery. Выполнение iif в запросе





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