![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Про Indy и синхронизацию потоков [D6, WinXP]
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]Ну и делалбы в каждом потоке свой запрос... указывая общий Конекшн
И никаких синхронизаций и подвисов всех клиентов из-за того что один запрос подвис.