Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / asa esql+thread / 4 сообщений из 4, страница 1 из 1
22.04.2005, 19:22
    #33031208
bindto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
asa esql+thread
hi all

знает ли кто как использовать esql в safethread'ax? по документации

If more than one thread uses the same SQLCA, a context option can cause more than one thread to be using the SQLCA at the same time. Each thread must have its own SQLCA.

возникает мысль, что при наличии SQLCA в каждом треде и подключении reentrant библиотек наступает тот самый safe, однако это не так. треды висят на Attempted two active database requests. если обложить мутексами все работает.
...
Рейтинг: 0 / 0
22.04.2005, 21:20
    #33031344
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
asa esql+thread
Очень похоже, что ты делаешь делаешь несколько SQLCA на один коннект. Угадал? :)

ASA не умеет делать несколько разных запросов внутри одного сеанса. Надо сначала сделать несколько SQLCA, потом каждый из них самостоятельно подключить к базе. Тогда и получится нормальная асинхронность. А так у тебя получается просто несколько описаний одного и того же сеанса. Соответственно при обращении к одному из SQLCA ты блокируешь все остальные.
...
Рейтинг: 0 / 0
23.04.2005, 13:19
    #33031690
bindto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
asa esql+thread
насколько я понимаю, это SQLCA на каждый конект.
например так

void *thread(void *smth)
{
exec sql include sqlca;
db_init(&sqlca);
exec sql connect....
exec sql select...
....
db_fini(&sqlca);
....
}
...
Рейтинг: 0 / 0
25.04.2005, 17:37
    #33034070
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
asa esql+thread
bindtoнасколько я понимаю, это SQLCA на каждый конект.
например так

void *thread(void *smth)
{
exec sql include sqlca;
db_init(&sqlca);
exec sql connect....
exec sql select...
....
db_fini(&sqlca);
....
}
Не совсем :) Этот код будет расшифрован на этапе компиляции, и ты получишь один общий статичный SQLCA объект в DATA сегменте. Тебе нужно объяснить препроцессору, что надо создавать несколько SQLCA в рантайме. Это делается командой SET SQLCA.

Загляни в BOL, в главы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ASA Programming Guide 
Embedded SQL Programming 
The SQL Communication Area (SQLCA) 
SQLCA management for multi-threaded or reentrant code

ASA Programming Guide 
Embedded SQL Programming 
The SQL Communication Area (SQLCA) 
Using multiple SQLCAs
Там все теория расписана :)
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / asa esql+thread / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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