Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Вниз

Сервис + созданный в рантайме TADOConnection -> проблема с   Найти похожие ветки 

 
Ihor Osov'yak   (2003-01-24 03:03) [0]

коннектом....

Вернее останавливается нить навечно на Connected := true;

В том же месте, но созданый традиционно, методом кидка на TService с аналогичными свойствами екземпляр TADOConnection
коннектится без проблем.

Никто такой странной вещи не наблюдал? И если наблюдал - то как боролся?


 
sniknik   (2003-01-24 08:23) [1]

не наблюдал но уже обсуждалось, пытался воспроизвести не удалось. у товарища решилось но что было он не написал. :-(
(подозреваю coInitialise не сделано, но .....???)

посмотри пример (рабочий) сравниш со своим может и решится (как и у него)
http://delphi.mastak.ru/cgi-bin/download.pl?look=1&id=1042708779&n=1


 
Ihor Osov'yak   (2003-01-24 13:26) [2]

>(подозреваю coInitialise не сделано, но .....???)

Да нет, я уже вышел из такого возраста, чтобы на такие грабли наступать..

> но что было он не написал. :-(

Нехороший он... Или ошибка тупой была, настолько, что стыдно вслух было сказать...


Делал примерно так, как ты, с той разностью создание коннекта не в отдельном потоке (хотя и это планировалось на потом),
а делалась попытка поначалу и в потоке сервиса, потом и в основном потоке...

.. Признал временное поражение, сделал пока схему с одним коннектом, к которому очередь выстраивается - проэкт должен был быть готов сегодня на утро, но придется еще как минимум пол-дня работать...

Поначалу сойдет, а потом может и разберусь, если заказчик на сервис уж много клиентов посадит... Тем более, что эти коннекты желательно разносить по своим рабочим потокам, я к этому не дошел даже, приехал на создании в рантайме...


... через эту траблу сидел к четырем утра..






 
sniknik   (2003-01-24 13:52) [3]

Ihor Osov"yak © (24.01.03 13:26)
нифига не понял. :-))

не, понял, что проблему решил, убого и самому не нравится но решил.
не понял когда трабл возникает. когда делаеш несколько потоков? или несколько коннектов? к разным/одной базе подключение?

в общем, набросай схему pls. где как в каком получается и где нет. может и пригодится знать где грабли возможны. а может и решим сообща.


 
Ihor Osov'yak   (2003-01-24 15:04) [4]

Вообще-то задача такова - сервис (требование заказчика), по TSrvSocket удаленные клиенты должны подключатся к довольно простенькой базе, база аксесовская(требование заказчика), клиентов может быть несколько десятков, но запросы простые, врямя выполнения - доли секунды....

Для сокета выбрал stThreadBlocking, c созданием своего рабочего потока для каждого коннекта (юзаю SrvSocketGetThread). Ассинхронный режим не брал может из-за лени, но главное в том, что все обработчики асинхронного вводв-вывода вызываются в одном потоке, следовательно для работы с базой для каждого коннекта нужно будет создавать по рабочему потоку. Впрочем, это для конкретной задачи может и засильно (многопоточная работа с базой), но есть хороший повод на маленьком проекте тренировку пройти. Но посколько для stThreadBlocking и так создаются потоки, то планировал работу с базой для каждого коннекта делать в соотв. потоках.

А теперь что вышло. В потоках, что создаются через SrvSocketGetThread облом - поток останавливается на
conn.Connected := true; ес-но с CoInitialiыe все в порядке, проперти самого коннекта проверялись не единыжди... Списал по началу на то, что в этом потоке нет цыкла выборки сообщений, бог его знает, что это адо внутри делает, небыло времени уже разбираться - поздний вечер... Думаю, для начала попытаюсь создать коннект в рантайме в потоках с цыклами выборок. Делал в собственно и в потоке сервиса (в обработчике ServiceStart),
и в основном потоке, в обработчике соотв. сообщения (юзалось и PostMessage с задействованием зацепки forms.Application.OnMessage, и SendMessage с предварительным юзанием AllocateHWnd, с целью обеспечения цели для того же SendMessage).
Симптомы везде те же. Останов потока на conn.Connected := true;, без никакого ексепшен.. В том же обработчике (это для случая основного потока, для других ес-но не пытался), коннект, созданный в дизайнере и с теми же значениями проперти конектится на ура.

... Не знаю даже, как воевать... Через несколько дней будет время - более детально изучу исходники vcl, может и отладчиком на диссамблерном уровне чего-то выловлю (точнее локализирую точку останова)



 
Zelius   (2003-01-24 17:57) [5]

Сорри, понимаю, что глупо, но на всякий случай - стоит ли AdoConnection.LoginPrompt = False?
Еще раз сорри :)


 
Ihor Osov'yak   (2003-01-24 18:54) [6]

to Zelius © (24.01.03 17:57)

> Сорри, понимаю, что глупо, но на всякий случай - стоит ли AdoConnection.LoginPrompt = False?

Глупость и самоуверенность не имеет границ. Это я о себе.

Для LoginPrompt я даже присваивания не делал, мол в конструкторе в false сбрасыватся, и что более интересно, TADOConnection.Create
не единижды смотрел, а LoginPrompt := True; незаметил :-(.
А он, сервис, даже не говорил, что нефиг чего-то отображать... Просто останавливался...

Мораль какова - не..г ночью работать... Или спать надо, или... Ну, сами понимаете...

Короче, все ok, в тч. и в потоках, созданных в SrvSocketGetThread... Хотя проект уже почти готов, сейчас начну в человечиский вид приводить. То есть для каждого клиента по своему коннекту к базе в соотв. thread...

Большое спасибо, Zelius ©







Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.02.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
14-29045
ZeroDivide
2003-01-24 14:33
2003.02.10
Запорол CD при прожиге. Надо восстановить.


4-29159
HappyNewYearToAll
2002-12-25 18:51
2003.02.10
Pipe - труба !


14-29066
тупень
2003-01-24 21:54
2003.02.10
Сил не хватило


1-28742
Wolfhound
2003-02-01 00:29
2003.02.10
Почта


1-28760
ed
2003-01-28 21:44
2003.02.10
В чем ошибка!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский