![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потоки
TTCustomDelphiMaster © (2002-12-06 15:37:00)Можно ли использовать в "дополнительном" потоке компоненты TTable и TQuery?
Сергей Бушин (2002-12-06 21:00:00) [1]код должен быть примерно такой:
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;
TTCustomDelphiMaster (2002-12-06 19:53:00) [2]Сергей Бушин
Что то не допонял. База у меня будет в Paradox (или InterBase). В каком месте нужно использовать TSesion?
Сергей Бушин (2002-12-06 18:44:00) [3]Еще добавлю, что при использовании БД в потоках необходимо выполнить два требования:
1. Каждый поток запроса должен распалагаться в собственном сеансе. Т.е. для TQuery необходим компонент Session. И ему (TSeesion) необходимо присвоить имя SessionName объекта TQuery.
2. Компонент для доступа к данным, т.е. TQuery и другие, не должен быть связан с TDatasource когда запрос открывается из вторичного потока. Иначе соединение должно быть реализовано в контексте основного потока.
Юрий Зотов (2002-12-06 18:17:00) [4]Нормальная, не раз проверенная схема. Наверное, излишне, но все же напомню:
1. Обновление прогрессбара (или что там вместо него) должно выполняться в контексте главного потока.
2. Сплэш-форму надо создавать просто вызовом Create, а не через Application.CreateForm, иначе она станет главной.
TTCustomDelphiMaster (2002-12-06 17:45:00) [5]Ок. Понял.
Сейчас заниманись разработкой концепции приложения. Дополнительные вопросы появятся недели через две.
Digitman (2002-12-06 16:54:00) [6]
> Такая схема имеет право на существование?
Вполне.
TTCustomDelphiMaster (2002-12-06 16:30:00) [7]Мне нудно проверить целостность базы при загрузке приложения. При нужно поазывать splash форму.
Я думаю сделать так
begin
Application.Initialize;
Здесь будет создание splash формы и потока для проверки целостности базы, в которой будет отражатся процесс проверки.
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Такая схема имеет право на существование?
Digitman (2002-12-06 15:51:00) [8]Можно.
Следует лишь учесть, что все классы, от которых зависит настройка и работа этих объектов, должны иметь отдельные экземпляры для каждого отдельного потока.