Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Про Indy и синхронизацию потоков [D6, WinXP]


Страницы:   1 2

NorthMan ©   (2005-07-01 08:07:00) 

Народ, подскажите, как лучше сделать.
Проблема такая:
Есть idTCPServer. В OnExecute принимается запрос от клиента, затем нужно выполнить внешнюю процедуру типа TForm1.GetData, в которой выполняется запрос в базу через ADO (выполняется AThread.Synchronize(TForm1.GetData)), а результат запроса необходимо вернуть в OnExecute. Подскажите, как с т.з. потока правильнее передать результат запроса. Через глобальную переменную, как мне кажется, нельзя, т.к. клиентов в каждый момент времени может быть много.


NorthMan   (2005-07-01 13:31:00) [21]

Выполняю, но при  CoInitialize(nil); получаю Access violation.... Что за фигня?


Slym   (2005-07-01 13:29:00) [22]

TAdoQuery я бы создавал динамически в теле потока.
CoInitialize Нужно вызывать в главном потоке сервиса как минимум до подключения к ДБ  обычно на OnServiceStart и в перед созданием/подключением TAdoQuery в дочерних потоках, ну и соответственно CoUninitialize вконце


Digitman   (2005-07-01 13:09:00) [23]

CoInitialize/CoUninitialize выполняешь ?


NorthMan   (2005-07-01 13:06:00) [24]

Спасибо, вроде начинаю разбираться. Вот только еще такая проблема возникает: когда пытаюсь делать AdoQuery.Open выдается ошибка OLE error 80030002. Инфы по этому поводу не много. Понял, что найти чего-то не может, но что конкретно? Путь к базе прописан, в DesignTime все открывается.


Digitman   (2005-07-01 12:54:00) [25]


> динамически создавать экземпляр TAdoQuery или можно юзать
> компоненты, бросив их, например, на TDataModule?


без разницы


> как это все согласовать с потоками Indy


Indy-потоки ничем не отличаются от любых иных наследников TThread


NorthMan   (2005-07-01 12:13:00) [26]

2 Slym
Рад, что все так круто, но проблема есть и ее хотелось бы решить. Поясните, как лучше: динамически создавать экземпляр TAdoQuery или можно юзать компоненты, бросив их, например, на TDataModule? И как это все согласовать с потоками Indy


Slym   (2005-07-01 12:07:00) [27]

Нагрузка на сервер 1000-10000 постов в день
перфоманс каунтеры показывают 10-20 мс на запрос выборки
30-500 мс на запросы вставки
И не вылетает (тьфу, тьфу, тьфу)


Slym   (2005-07-01 11:59:00) [28]

Четы по ADO в сервисе... Ты пробовал? Я да.
У меня веб сервер (на Indy) как сервис пишет логи в Access через ADO, динамические страницы берут данные из таблиц в разных ДБ тоже через ADO (добавление тоже имеется с транзакциями иногда), + небольшое клиент-сервер приложение обслуживает на ура


Digitman   (2005-07-01 11:43:00) [29]


> сервер организован в виде службы, а ADO что-то не очень
> любит такие выкрутасы


что, прямо так и говорит, мол, не люблю и все тут ?

а при чем здесь тогда синхронизация ?


NorthMan   (2005-07-01 11:40:00) [30]

беда в том, что сервер организован в виде службы, а ADO что-то не очень любит такие выкрутасы


Slym   (2005-07-01 08:26:00) [31]

Ну и делалбы в каждом потоке свой запрос... указывая общий Конекшн
И никаких синхронизаций и подвисов всех клиентов из-за того что один запрос подвис.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо