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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
14-4604
oddboy
2002-11-04 08:54
2002.12.02
Нужна прога по элементарной векторной графике!


6-4545
Kotka
2002-10-06 01:14
2002.12.02
Почему она не понимает русских букв?


3-4180
Semu
2002-11-13 12:08
2002.12.02
DBGrid - (MEMO)- ORACLE продолжение


3-4211
Геннадий
2002-11-12 21:42
2002.12.02
При удалении дублир-щих записей удал-ся ВСЕ. А как оставить одну?


4-4683
Дмитрий Астрохов
2002-10-22 17:55
2002.12.02
Заполнение ComboBox пунктами?





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