Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
ВнизTADOConnection и TThread Найти похожие ветки
← →
MVova (2004-01-13 15:41) [0]Делаем новый проект.
Добавляем поток:
ttt = class(TThread)
..........................
procedure ttt.Execute;
var
D : TADOConnection;
begin
CoInitializeEx( nil, 0);
D:= TADOConnection.Create(nil);
repeat
Sleep(10);
until false;
end;
На форму кладем кнопку.
На клик кнопки пишем
procedure TForm1.Button1Click(Sender: TObject);
begin
ttt.Create(false);
end;
Запускаем приложение.
Нажимаем на клавиатуре Windows + E (вызов проводника)
Все прекрасно, открылся.
Жмем кнопку на форме.
Нажимаем на клавиатуре Windows + E (вызов проводника)
Опс, не открылся. И не откроется пока не уничтожится TADOConnection.
Встречал ли такое кто-то?
Как с этим бороться?
← →
Palladin (2004-01-13 17:38) [1]научись играть на гитаре... применительно к тебе: создавать объекты классов
← →
Serginio666 (2004-01-13 18:05) [2]А где CoUnInitializeEx( nil, 0);
← →
Семен Сорокин (2004-01-13 18:09) [3]Palladin © (13.01.04 17:38) [1]
научись играть на гитаре... применительно к тебе: создавать объекты классов
ну с этим вроде все нормально
ttt - тип, а не экземпляр
← →
Семен Сорокин (2004-01-13 18:11) [4]только убивать надо после себя :)
и поток (FreeOnTerminate), и TADOConnection
← →
MVova (2004-01-13 18:17) [5]
> Palladin © (13.01.04 17:38) [1]
Если можно, подробнее.
Могу привести полностью код, если надо.
← →
MVova (2004-01-13 18:19) [6]
> Семен Сорокин © (13.01.04 18:11) [4]
Я все это понимаю, это не рабочий проект и уборка за собой не влияет на поведение системы. Все сделано для наглядности.
← →
Семен Сорокин (2004-01-13 18:22) [7]2MVova
попробуй создавать Connection в конструкторе.
← →
MVova (2004-01-13 18:31) [8]
> Семен Сорокин © (13.01.04 18:22) [7]
Спасибо. Помогло.
Хоть намеком, где собака зарыта?
← →
MVova (2004-01-13 18:44) [9]
> Семен Сорокин © (13.01.04 18:22) [7]
Не, не получилось. Конструктор работает в потоке создателе. Необходимо коннект создавать именно в другом потоке.
В реальной ситуации коннект создается COM сервером, а каждый COM сервер в отдельном потоке.
← →
Тимохов (2004-01-13 18:48) [10]MVova © (13.01.04 18:44) [9]
Может поможет. У меня также используется adoconnection из различных потоков. Создается в главном потоке, а используется в неглавных. Т.к. ado apartment, то это можно. При обращении к adoconnection используется критическая секция.
← →
MVova (2004-01-13 18:53) [11]
> Тимохов © (13.01.04 18:48) [10]
Мелькнула у меня такая мысль, но как-то не охота.
И к тому же маштабируемость снижается.
← →
Тимохов (2004-01-13 18:55) [12]Да вообще с этим apartment не все ясно. Я вот тут сейчас почитал, и подумал, что может вообще и без критических секций можно обойтись.
Вообще ворос к мастерам дельфи+com. Можно ли к aparment com объекту, созданному в главном потоке, безопасно обращаться из дочерних потоков без средств синхронизации?
← →
Семен Сорокин (2004-01-13 19:09) [13]Тимохов © (13.01.04 18:55) [12]
Apartment (or Single-threaded apartment)
COM ensures that only one client thread can call the object at a time. All client calls use the thread in which the object was created.
Objects can safely access their own instance data, but global data must be protected using critical sections or some other form of serialization.
походу нет.
← →
Тимохов (2004-01-13 19:15) [14]Семен Сорокин © (13.01.04 19:09) [13]
Семен, знаете ли, я неплохо знаю английский и, конечно, я это читал. Но понять я это не могу. Поясню вопрос. Что имеется в виду под global data, я так понимаю, что имеется в виду глобальная дата относительно ком-объекта. Тогда я тут причем - ado писал не я, соответственно это не моя забота. А вот могу ли я его использовать из разных потоков - не ясно.
← →
Palladin (2004-01-13 19:27) [15]Прошу прощенья за невнимательность.
← →
Семен Сорокин (2004-01-13 20:19) [16]2Тимохов
вот на сайте глубокоуважаемого Подгоретского нашел:
http://podgoretsky.com/ftp/Docs/Delphi/DX/COMmodel.html
← →
MVova (2004-01-14 11:09) [17]UP
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c