Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.007 c
14-72891
Joker
2004-01-02 23:30
2004.01.23
Какой винчестер лучше?


1-72732
Wolverin
2004-01-05 15:15
2004.01.23
Глюки TImage


3-72640
Denis
2003-12-26 13:26
2004.01.23
Нужна помощь с SumList


1-72755
Austin
2004-01-13 03:43
2004.01.23
удалить запись из файла


14-72895
race1
2004-01-03 08:38
2004.01.23
bat string





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский