powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / IBAPI и APC
25 сообщений из 30, страница 1 из 2
IBAPI и APC
    #38907200
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы знаете, что IBAPI не совместимо с APC из WinApi ?

В отладчике выяснилось, что APC вылетает из функции select, которую использует внутри gds32.dll. Любой код вида

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void APIENTRY user_apc(ULONG_PTR dwParam)
{
 //1
}

void main()
{
 QueueUserAPC(user_apc,GetCurrentThread(),0);
 sql q("select 1 from rdb$database");
 //любой sql-оператор на любых компонентах доступа

 //2
}



Попадает в точку 1 перед точкой 2.

Причина этого описана в msdn:

-----------------------------------------------------------
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v=vs.85).aspx

Note When issuing a blocking Winsock call such as select with the timeout parameter set to NULL, Winsock may need to wait for a network event before the call can complete. Winsock performs an alertable wait in this situation, which can be interrupted by an asynchronous procedure call (APC) scheduled on the same thread. Issuing another blocking Winsock call inside an APC that interrupted an ongoing blocking Winsock call on the same thread will lead to undefined behavior, and must never be attempted by Winsock clients.
-----------------------------------------------------------

Печально всё это и лечению не подлежит. Даже если переделать gds32.dll то редистрибьютить его нереально.
...
Рейтинг: 0 / 0
IBAPI и APC
    #38907226
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_Печально всё это и лечению не подлежит.
Да, у современной медицины нет средства против анацефалии. Те, у кого есть мозг,
догадаются задействовать третий параметр.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBAPI и APC
    #38908005
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой ещё 3тий параметр?
Это грабли, на которые рано или поздно можно наступить.
...
Рейтинг: 0 / 0
IBAPI и APC
    #38908073
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_Какой ещё 3тий параметр?
Тот, что идёт сразу после первого и второго. Ты всерьёз полагаешь, что твой колбэк -
единственный и будет вызван только когда ты ожидаешь?..

PS: И я уж не говорю о том, что вся система APC - застарелые хакерские трюки, к применению
негодные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBAPI и APC
    #38908166
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм, а ты в курсе что такое вообще Alertable Wait State? В MSDN по этому поводу много буков исписано.
...
Рейтинг: 0 / 0
IBAPI и APC
    #38908184
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторяю ещё раз, медленно: любой хук или колбэк, который ты установил в системе имеет
право быть вызван когда угодно, кем угодно и по какому угодно поводу в любой момент после
его установки. С какого перепою ты решил, что он может быть вызван исключительно в точке
2, я понятия не имею. И иметь не хочу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBAPI и APC
    #38908304
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очередь APC это не хук, и может обрабатываться только в строго в определённые моменты. Иначе ничего работать толком не будет.
...
Рейтинг: 0 / 0
IBAPI и APC
    #38908448
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_,

ты, чем рыдать, объясни лучше - что реально у тебя поломалось ?
...
Рейтинг: 0 / 0
IBAPI и APC
    #38908459
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не могу использовать APC в потоке работающим с БД. Например таймеры через SetWaitableTimer с установленной CompletionRoutine
...
Рейтинг: 0 / 0
IBAPI и APC
    #38908472
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_не могу использовать APC в потоке работающим с БД
у тебя клиентская либа от какой версии и какой СУБД (Firebird, InterBase) ?
В пределах одного коннекта вызовы IB/FB API не работают из разных потоков. Разве что в ФБ 2.5 (fbclient.dll) сделана блокировка вызовов, то есть, глючить не будет, но все равно две функции одновременно работать не будут (одна будет ждать завершения другой).
Параллельно будут работать только два разных коннекта.

p.s. редко какие библиотеки sql-серверов позволяют в пределах коннекта операции из разных тредов.
...
Рейтинг: 0 / 0
IBAPI и APC
    #38908495
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_Я не могу использовать APC в потоке работающим с БД. Например таймеры через SetWaitableTimer с установленной CompletionRoutineМожешь. Но почему-то для тебя проблема, если твой APC вызовется "внутри" вызова ISC API. Почему ?
...
Рейтинг: 0 / 0
IBAPI и APC
    #38908532
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_Очередь APC это не хук, и может обрабатываться только в строго в определённые
моменты.
По названию, назначению и документации это Asynchronous Procedure Call. Из чего
следует, что процедура вызовется тогда, когда система этого захочет.

Смотри сюда: вызвав QueueUserAPC(), ты сказал системе "вызови на досуге эту процедуру в
контексте этого потока с этим параметром". Всё. Ты не можешь и не должен строить никакие
предположения о том когда у потока будет досуг. Точка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBAPI и APC
    #38908565
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВ пределах одного коннекта вызовы IB/FB API не работают из разных потоков.

Если предоставить внешнюю синхронизацию, то все работает. начиная с IB4.

kdvРазве что в ФБ 2.5 (fbclient.dll) сделана блокировка вызовов, то есть, глючить не будет.

В 2.5 она глючит. Для этого надо, конечно, немножко приложить усилия. Но факт остается фактом.

О чем я сообщал Пешкову и Еманову. В переписке по поводу херни с сетевым пакетом.
...
Рейтинг: 0 / 0
IBAPI и APC
    #38909874
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvavp_не могу использовать APC в потоке работающим с БД
у тебя клиентская либа от какой версии и какой СУБД (Firebird, InterBase) ?
В пределах одного коннекта вызовы IB/FB API не работают из разных потоков. Разве что в ФБ 2.5 (fbclient.dll) сделана блокировка вызовов, то есть, глючить не будет, но все равно две функции одновременно работать не будут (одна будет ждать завершения другой).
Параллельно будут работать только два разных коннекта.

p.s. редко какие библиотеки sql-серверов позволяют в пределах коннекта операции из разных тредов.

kdv, с APC можно работать и в однопоточном приложении. Это такой механизм Windows
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms681951(v=vs.85).aspx
...
Рейтинг: 0 / 0
IBAPI и APC
    #38909880
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladavp_Я не могу использовать APC в потоке работающим с БД. Например таймеры через SetWaitableTimer с установленной CompletionRoutineМожешь. Но почему-то для тебя проблема, если твой APC вызовется "внутри" вызова ISC API. Почему ?

Контекст невалидный. Представь если бы TTimer->OnTimer в delphi срабатывал бы при работе с DataSet.
Тут такая же картина.
...
Рейтинг: 0 / 0
IBAPI и APC
    #38909951
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_Контекст невалидный.
Повторяю ещё раз, медленно: ты не можешь делать никаких предположений о времени вызова
асинхронной процедуры.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBAPI и APC
    #38909961
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_Контекст невалидный.Ну так это твои проблемы, как прикладного программиста.
Система понятия не имеет о твоём контексте и о твоих требованиях к нему.
Обеспечь :)

Dimitry SibiryakovПовторяю ещё раз, медленно: ты не можешь делать никаких предположений о времени вызова
асинхронной процедуры.++
...
Рейтинг: 0 / 0
IBAPI и APC
    #38909982
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все таки тема третьего параметра не раскрыта!
...
Рейтинг: 0 / 0
IBAPI и APC
    #38909990
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_hvladпропущено...
Можешь. Но почему-то для тебя проблема, если твой APC вызовется "внутри" вызова ISC API. Почему ?

Контекст невалидный. Представь если бы TTimer->OnTimer в delphi срабатывал бы при работе с DataSet.
Тут такая же картина.А зачем TTimer'у в дельфи ставить в очередь APC? У него другие задачи. Зачем ты используешь WaitableTimer c процедурой завершения? Тут реально нельзя угадать, когда и в каком месте она будет вызвана. В apc очереди могут быть и другие процедуры, и вызываться они будут по очереди во время перехода потока в тревожное состояние. Таким образом твоя процедура завершения должна быть готова к этим обстоятельствам. Разве не так?
...
Рейтинг: 0 / 0
IBAPI и APC
    #38911020
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
APC вызываются только и исключительно из Alertable Wait State.
Как вы думаете, зачем функцию SleepEx добавили?
...
Рейтинг: 0 / 0
IBAPI и APC
    #38911035
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_APC вызываются только и исключительно из Alertable Wait State.
А ты с какого-то похмелья почему-то считаешь, что у тебя есть эксклюзивная монополия на
приведение потока в это состояние. Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IBAPI и APC
    #38911145
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это обязано быть отображено в документации.
...
Рейтинг: 0 / 0
IBAPI и APC
    #38911169
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_,

в документации на IB/FB API? Почему? Почему это вообще должно быть отражено в любой другой библиотеке?
...
Рейтинг: 0 / 0
IBAPI и APC
    #38911191
avp_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что это побочный эффект, который нарушает контракт с Win
...
Рейтинг: 0 / 0
IBAPI и APC
    #38911238
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp_Потому что это побочный эффект, который нарушает контракт с WinКакой контракт ?
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / IBAPI и APC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]