Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрос в потоке. Правильно пишу? [D7, XP]


Страницы:   1 2 3 4

12 ©   (2010-11-30 15:48:00) 

     
 TQ: ThQuery;
после прочтения Многопоточность - как это делается в Дельфи
решил применить к жизни.
Пишу
...
     TQ := ThQuery.Create(True);
     TQ.FreeOnTerminate := True;
     TQ.Q := AQuery;
     TQ.Resume;
....

где,
type
 ThQuery = class(TThread)
 private  
   FQ: TOraQuery;  
   function GetQ: TOraQuery;
   procedure SetQ(const Value: TOraQuery);
 protected
   procedure Execute; override;
 public
   property Q: TOraQuery read GetQ write SetQ;
 end;

implementation

procedure ThQuery.Execute;
begin
 Q.Open;
end;
function ThQuery.GetQ: TOraQuery;
begin
 Result := FQ;
end;
procedure ThQuery.SetQ(const Value: TOraQuery);
begin
 FQ := Value;
end;


Ega23   (2010-12-02 11:55:00) [21]


> А кто говорил про МДИ ?


Влад говорил.


> Проверено многократно.


С этим никто не спорит. "Всякому овощу...", как ИШ любит говорить.
Вот только всё равно в [32] пункты 4 и 5 - чушь. :)


MsGuns   (2010-12-02 11:25:00) [22]

>Leonid Troyanovsky ©   (01.12.10 22:42) [53]
>Повышение эффективности многопоточности можно связать,
>например, с ростом количества процессоров в системе, хотя,
>уж вовсе не в разы.

Имелось в виду, что одну и ту же работу бухгалтер (экономист, технолог, менеджер по продажам и т.д.) делает с "многопоточной" программой в два-три раза быстрее, чем с программой, работающей "как обычно".
Проверено многократно.


MsGuns   (2010-12-02 11:22:00) [23]

А кто говорил про МДИ ?


Ega23   (2010-12-01 23:42:00) [24]


>  берем любую профи-прогу (тот же почтовый клиент, торрент
> и многое другое) и смотрим как реализовано, в т.ч. интерфейс
> - и делаем так же


Открыл m-Torrent и Thunderbird. Посмотрел на интерфейс. MDI не увидел.
Что я делаю не так?


Leonid Troyanovsky   (2010-12-01 22:42:00) [25]


> MsGuns ©   (01.12.10 20:46) [52]

>  а многопоточность весьма уместна и реально в разы повышает
> эффективность работы с прогой.

Повышение эффективности многопоточности можно связать,
например, с ростом количества процессоров в системе, хотя,
уж вовсе не в разы.

--
Regards, LVT.


MsGuns   (2010-12-01 20:46:00) [26]

>Ega23 ©   (01.12.10 11:28) [48]
>Юзер скорее на "Косынку" какую-нибудь переключится.

Далеко не всегда. "Фоновость" полезна в ситуациях, когда надо много вводить и параллельно формировать отчеты - в этом случае юзеру (бухгалтеру например) не до "косынок", а многопоточность весьма уместна и реально в разы повышает эффективность работы с прогой.

И вообще чего тут рассуждать - берем любую профи-прогу (тот же почтовый клиент, торрент и многое другое) и смотрим как реализовано, в т.ч. интерфейс - и делаем так же


Anatoly Podgoretsky   (2010-12-01 13:37:00) [27]


> Юзер скорее на "Косынку" какую-нибудь переключится.

Боятся. Предпочитают подождать.


Anatoly Podgoretsky   (2010-12-01 13:35:00) [28]

> 12  (01.12.2010 10:40:38)  [38]

Ассинхронные запросы. Но надо уметь с ними работать. Ассинхронность, веэде,
не всем подвластна.


Anatoly Podgoretsky   (2010-12-01 13:34:00) [29]


> 12 ©   (01.12.10 10:40) [38]

Анимация


Ega23   (2010-12-01 11:28:00) [30]


> Вот это и есть САМОЕ ГЛАВНОЕ ЗАБЛУЖДЕНИЕ.


ИМХО, +1.
Юзер скорее на "Косынку" какую-нибудь переключится.


Ega23   (2010-12-01 11:27:00) [31]


> Больно сурьезно


В целом именно так и делается. Таким образом можешь самостоятельно нагрузкой на БД рулить.


Игорь Шевченко   (2010-12-01 11:26:00) [32]


> но тогда пользователь в другое МДИ окно не мог переключится
> и поредактировать что-то, пока запрос идет.


Вот это и есть САМОЕ ГЛАВНОЕ ЗАБЛУЖДЕНИЕ.

Пользователь, который открывает окно с данными, не будет никуда переключаться и , тем более, что-то редактировать, а будет тупо ждать, пока нужные данные не появятся или пойдет курить/пить чай/трепаться с коллегами.


12   (2010-12-01 11:23:00) [33]


> Ega23 ©   (01.12.10 11:19) [44]

Больно сурьезно
если будет надобность - надо будет попробавать нечто подобное сделать


Ega23   (2010-12-01 11:19:00) [34]

На самом деле я бы пул соединений сделал. Т.е. есть класс потока, есть класс - список этих потоков. У класса-списка есть свойство, типа MaxConnections. Также этот класс-список знает, какие потоки у него в данный момент раюотают, а какие - простаивают.
Передал туда текст запроса, он пробежался по списку. если нашёл свободный - передал запрос ему. Если свободных не нашёл - создал новый (если Count < MaxConnections). Если свободных нет и Count = MaxConnections - ждём, пока кто-то освободится.


12   (2010-12-01 11:05:00) [35]


> ачем? Ставь его в Suspend. Соединение создано, НД создан.

Логично, ща..


Ega23   (2010-12-01 11:04:00) [36]

А, ну это другое дело.


12   (2010-12-01 11:02:00) [37]


> Screen.Cursor := crSQLWait;
> try
>  DataSet.Open;
> finally
>  Screen.Cursor := crDefault;
> ebd;

так и было до потока
но тогда пользователь в другое МДИ окно не мог переключится и поредактировать что-то, пока запрос идет.


Ega23   (2010-12-01 10:51:00) [38]


> И убиваю поток, когда пользователь новый запрос просит выполнить


Зачем? Ставь его в Suspend. Соединение создано, НД создан.


Ega23   (2010-12-01 10:49:00) [39]


>  чтоб у юзера не было сомнений, программа ли зависла или
> запрос долгий.


Screen.Cursor := crSQLWait;
try
 DataSet.Open;
finally
 Screen.Cursor := crDefault;
ebd;


:)


12   (2010-12-01 10:40:00) [40]


> И убиваю поток, когда пользователь новый запрос просит выполнить

Да, и не даю выпонять еще один, пока не выполнился первый - иначе БД положат
А нафига все это - именно как ЮЗ сказал - чтоб у юзера не было сомнений, программа ли зависла или запрос долгий.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо