Почему так долго работают TIBEvents в Delphi?
Почему так долго работают TIBEvents в Delphi?
Всем здравствуйте!
Использую Firebird 1.5.
У меня есть приложение, которое должно оперативно реагировать на Firebird-события, возникающие в базе данных.
Приложение написано с использованием IBX. В частности, используется компонент TIBEvents.
Так вот, Дельфийский обработчик события, повешенный на этот компонент, периодически запускается намного позже, чем событие произошло (примерно до 10 сек задержки).
Как можно ускорить запуск обработчика событий? Потому что такая задержка для нашего приложения недопустима.
Заранее спасибо!
Использую Firebird 1.5.
У меня есть приложение, которое должно оперативно реагировать на Firebird-события, возникающие в базе данных.
Приложение написано с использованием IBX. В частности, используется компонент TIBEvents.
Так вот, Дельфийский обработчик события, повешенный на этот компонент, периодически запускается намного позже, чем событие произошло (примерно до 10 сек задержки).
Как можно ускорить запуск обработчика событий? Потому что такая задержка для нашего приложения недопустима.
Заранее спасибо!
Re: Почему так долго работают TIBEvents в Delphi?
Как определил?Barvetal писал(а):обработчик события, повешенный на этот компонент, периодически запускается намного позже, чем событие произошло (примерно до 10 сек задержки).
Re: Почему так долго работают TIBEvents в Delphi?
Потому что обработчик события отрисовывает изображения на экране и запускает принтер на печать. Все это происходит не сразу, а с различной задержкой...WildSery писал(а):Как определил?Barvetal писал(а):обработчик события, повешенный на этот компонент, периодически запускается намного позже, чем событие произошло (примерно до 10 сек задержки).
Ага. Сорри...WildSery писал(а):Я автора тоже к этой мысли подводить пытаюсь.
Только ведь так и не ответил, "не сразу" и "задержка" между чем и чем?
Система такая. Есть кафетерий. В кафетерии стоит система контроля доступа (СКД). Эта система обрабатывает события, когда карточки были приложены к кардхолдеру (не знаю, как правильно назвать эту хрень - пластмасовая коробочка с лампочкой, к которой нужно приложить карточку).
Так вот, на событие ("приложил карточку к кардхолдеру"), можно повесить на сервере выполнение любой программы c командной строкой. Я написал программу, которая на это событие скидывает в базу данных Firebird информацию о пользователе, и запускает event, что добавилась новая регистрация пользователя.
Дальше - на клиентской машине в кафетерии необходимо отобразить в другой моей программе информацию о человеке, приложившим пропуску, и распечатать чек. Больше программа ничего не делает!
Так вот - иногда программа сразу показывает информацию о человеке и запускает чек на печать, иногда с задержкой (до 10 секунд где-то).
Вот я и спрашиваю - что это может быть такое? Почему так долго?
так у тебя программа каждый раз заново запускается при получении события от карточной системы?Barvetal писал(а):Ага. Сорри...WildSery писал(а):Я автора тоже к этой мысли подводить пытаюсь.
Только ведь так и не ответил, "не сразу" и "задержка" между чем и чем?
Система такая. Есть кафетерий. В кафетерии стоит система контроля доступа (СКД). Эта система обрабатывает события, когда карточки были приложены к кардхолдеру (не знаю, как правильно назвать эту хрень - пластмасовая коробочка с лампочкой, к которой нужно приложить карточку).
Так вот, на событие ("приложил карточку к кардхолдеру"), можно повесить на сервере выполнение любой программы c командной строкой. Я написал программу, которая на это событие скидывает в базу данных Firebird информацию о пользователе, и запускает event, что добавилась новая регистрация пользователя.
Дальше - на клиентской машине в кафетерии необходимо отобразить в другой моей программе информацию о человеке, приложившим пропуску, и распечатать чек. Больше программа ничего не делает!
Так вот - иногда программа сразу показывает информацию о человеке и запускает чек на печать, иногда с задержкой (до 10 секунд где-то).
Вот я и спрашиваю - что это может быть такое? Почему так долго?
хм, а ты полагаешь, что цомпутер только и ждет как твою программу запустить? у него других дел нет?Barvetal писал(а):Да. Но она очень маленькая. Все, что она делает - это коннектится к базе, записывает туда запись, и завершается. Это консольное приложение, которое не содержит никаких окон...stix-s писал(а):так у тебя программа каждый раз заново запускается при получении события от карточной системы?
что-нить в виртуальную память сбросить или вытащить оттуда, в режим эноргосбережения уйти или или еще чего
каждый раз заново коннект приходится заново делать, может еще и метаданные закэшировать
зачем?
FB тут ни при чем
Хм... Звучит очень даже рационально... Так, как бы проверить...stix-s писал(а):хм, а ты полагаешь, что цомпутер только и ждет как твою программу запустить? у него других дел нет?
что-нить в виртуальную память сбросить или вытащить оттуда, в режим эноргосбережения уйти или или еще чего
каждый раз заново коннект приходится заново делать, может еще и метаданные закэшировать
зачем?
FB тут ни при чем
Я, наверное, настрою часы посекундно с сервером, и посмотрю по таймстемпу, когда данные ложатся в базу - сразу после прикладывания карточки, или позже..