Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.02;
Скачать: CL | DM;

Вниз

Приложение тормозит пока не отработает поток   Найти похожие ветки 

 
alextov   (2002-11-20 15:32) [0]

Есть приложение для работы с базами данных.
Одна форма главная (с маленьким TTable), и несколько дочерних форм с большими TTable"ами.
Для избежания долгой загрузки приложения я при загрузке открываю TTable только на главной форме,а в файле проекта создаю поток, который загружает данные в TTable (TTable.Open) в нескольких дочерних формах.

....*.dpr........
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);

Thread1:=TLoadThread.Create(false);
Thread1.Priority:=tpLowest;

Application.Run;
end.

......TThreadMy......
procedure TLoadThread.Execute;
begin
Synchronize(Form2.Table1.Open);
Synchronize(Form3.Table1.Open);
end;
.............................

Но хоть главня форма и появляеться сразу на екране, но курсор представлен в виде песчаных часов (и соответственно приложение не реагирует на действия пользователя) пока не завершиться поток (пока не загрузятся все данные в все TTablы).

Может кто подскажет что я делаю не так ???


 
Alx2 ©   (2002-11-20 15:35) [1]

>alextov (20.11.02 15:32)
Все попытки разгрузить основной поток разбиавются об
Synchronize(Form2.Table1.Open);
Synchronize(Form3.Table1.Open);

PS
Digitman оторвет кое-кому не только руки :))


 
alextov   (2002-11-20 15:46) [2]

Но если я правильно читал книги, то обращаться из потока к компонентам VCL настоятельно рекомендуют посредством Synchronize() дабы избежать deadlock"а.


 
Starkom ©   (2002-11-20 15:50) [3]

alextov: правильно читал :) А ты не юзай VCL.


 
alextov   (2002-11-20 15:53) [4]

поздно
уже заюзал на всю котушку


 
Alx2 ©   (2002-11-20 16:10) [5]

>alextov (20.11.02 15:53)
Работай в threade со своим экземпляром, а потом готовое переноси в основной поток (если оно там надо, конечно).


 
Внук ©   (2002-11-20 16:27) [6]

Если я все правильно помню (не помню только, где читал, в Калверте?) TTable относится к Thread-safe objects, то есть работу с ним можно не синхронизировать.


 
Starkom ©   (2002-11-20 16:32) [7]

2 Внук - так один фиг там все через критикал секции сделано. Потому и синхронизе не нужен. А работать быстрее не будет.


 
NailS ©   (2002-11-20 16:33) [8]

>посредством Synchronize() дабы избежать deadlock"а.
Вообще-то Synchronize предназначался для других целей ;)


> Starkom ©


> ты не юзай VCL

А не слишком категорично?

Всецело поддерживаю совет Alx2. Вот только думаю, что основное внимание надо уделить потокозащещенности TDatabase (если таковая используется, конечно)


 
alextov   (2002-11-20 16:40) [9]

В связи с вышесказанным возникла пара дополнительных вопросов(возможно слегка ламерских)

Alx2 © (20.11.02 16:10)
>>Работай в threade со своим экземпляром, а потом готовое переноси в основной поток (если оно там надо, конечно).

извини, не совсем понял, а как потом готовое переносить в основной поток?

2 NailS © (20.11.02 16:33)
а что подразумевается под потокозащищенностью.


 
Внук ©   (2002-11-20 16:42) [10]

>>Starkom © (20.11.02 16:32)
Критические секции и встраивание одного потока в другой (синхронизация) - это все-таки разные вещи, поэтому не могу согласиться :) Например, в исходниках DOA используют потоки для выполнения запросов.

>>alextov
Все верно, Чарльз Калверт, страница 127.
"Оставшаяся часть VCL в основном не является безопасной для использования в потоках с еще несколькими ключевыми исключениями. Одним из наиболее важных исключений является метод Open для TQuery, TDatabase и TTable..."


 
Alx2 ©   (2002-11-20 16:45) [11]

>alextov (20.11.02 16:40)
Внук рассеял сомнения.


 
Alx2 ©   (2002-11-20 16:49) [12]

>alextov (20.11.02 16:40)
>Alx2 © (20.11.02 16:45)
Выкидывай synchronize


 
alextov   (2002-11-20 17:00) [13]

Спасибо всем
Ща попробую...



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

Текущий архив: 2002.12.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
1-4299
----
2002-11-19 18:51
2002.12.02
Коннект к запущенному СОМ-обьекту


4-4662
sancho
2002-10-19 22:36
2002.12.02
Кто знает как открыть окно Дата и Время


1-4407
Bublichek
2002-11-22 15:50
2002.12.02
Нужна помощь!


14-4625
PVOzerski
2002-11-12 21:24
2002.12.02
Что выбрать? (ответ нужен в течение 12 ноября!)


1-4309
BJValentine
2002-11-21 11:25
2002.12.02
FindFirst, FindNext, FindClose