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

Вниз

Потоки   Найти похожие ветки 

 
TTCustomDelphiMaster   (2002-12-06 15:37) [0]

Можно ли использовать в "дополнительном" потоке компоненты TTable и TQuery?


 
Digitman   (2002-12-06 15:51) [1]

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


 
TTCustomDelphiMaster   (2002-12-06 16:30) [2]

Мне нудно проверить целостность базы при загрузке приложения. При нужно поазывать splash форму.
Я думаю сделать так
begin
Application.Initialize;
Здесь будет создание splash формы и потока для проверки целостности базы, в которой будет отражатся процесс проверки.
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Такая схема имеет право на существование?


 
Digitman   (2002-12-06 16:54) [3]


> Такая схема имеет право на существование?


Вполне.


 
TTCustomDelphiMaster   (2002-12-06 17:45) [4]

Ок. Понял.
Сейчас заниманись разработкой концепции приложения. Дополнительные вопросы появятся недели через две.


 
Юрий Зотов   (2002-12-06 18:17) [5]

Нормальная, не раз проверенная схема. Наверное, излишне, но все же напомню:
1. Обновление прогрессбара (или что там вместо него) должно выполняться в контексте главного потока.
2. Сплэш-форму надо создавать просто вызовом Create, а не через Application.CreateForm, иначе она станет главной.


 
Сергей Бушин   (2002-12-06 18:44) [6]

Еще добавлю, что при использовании БД в потоках необходимо выполнить два требования:
1. Каждый поток запроса должен распалагаться в собственном сеансе. Т.е. для TQuery необходим компонент Session. И ему (TSeesion) необходимо присвоить имя SessionName объекта TQuery.
2. Компонент для доступа к данным, т.е. TQuery и другие, не должен быть связан с TDatasource когда запрос открывается из вторичного потока. Иначе соединение должно быть реализовано в контексте основного потока.


 
TTCustomDelphiMaster   (2002-12-06 19:53) [7]

Сергей Бушин
Что то не допонял. База у меня будет в Paradox (или InterBase). В каком месте нужно использовать TSesion?


 
Сергей Бушин   (2002-12-06 21:00) [8]

код должен быть примерно такой:

MySession.SessionName:=GenerateUniqueValue;
MyDataBase.SessionName:=Session.SessionName;
MyQuery.DatabaseName:=MyDatabase.DatabaseName;
MyQuery.SessionName:=Session.SessionName;
MyThread:=TMyDBThread.Create(MyQuery, MyDatasource);

В потоке уже открывается запрос. В конструктор потока передается также TDatasource, чтобы связать его в потоке с Query, но это нужно делать через Synchronize, т.е.:

procedure TMyDBThread.Execute;
begin
...
ThreadQuery.Open;
Synchronize(UpdateVCL);
...
end;

procedure TMyDBThread.UpdateVCL;
begin
...
ThreadSource.DataSet:=ThreadQuery;
...
end;





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

Форум: "Основная";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.007 c
6-61734
krai
2002-10-21 15:44
2002.12.19
POP3 сервер


3-61409
Eduard
2002-12-02 15:09
2002.12.19
Подвисание программы на время выборки большого объёма данных.


6-61736
Lex_!
2002-10-09 04:47
2002.12.19
Чат без сервера


3-61412
antoniz
2002-12-03 15:34
2002.12.19
Подскажите по Paradox


14-61815
Ixion
2002-11-26 23:14
2002.12.19
Тестирование памяти





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