![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Зависает программа при использовании EventAlerter [D7, Firebird]
akss © (2008-12-08 15:43:00)Такой вопрос - не у кого не возникало проблем при регистрации событий
в 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 16:08:00) [21]
> Это происходит не в потоке
В Win32 ничтоне может происходить "не в потоке".
> при вызове метода FIBEvent.RegisterEvents
В какомпотоке ?
akss (2008-12-08 16:05:00) [22]
> В каком потоке ?
Это происходит не в потоке, это при вызове метода FIBEvent.RegisterEvents;
он тупо иногда зависает (вернее часто).
Сергей М. (2008-12-08 15:49:00) [23]
> этот момент происходит регистрация события как объекта
В каком потоке ?
Сергей М. (2008-12-08 15:49:00) [24]
> этот момент происходит регистрация события как объекта
В каком потоке ?