![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос в потоке. Правильно пишу? [D7, XP]
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]
> И убиваю поток, когда пользователь новый запрос просит выполнить
Да, и не даю выпонять еще один, пока не выполнился первый - иначе БД положат
А нафига все это - именно как ЮЗ сказал - чтоб у юзера не было сомнений, программа ли зависла или запрос долгий.