![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос в потоке [D7, XP]
q1485 © (2008-02-29 13:31:00)Прочитал статьи на сайте. Не получается выполнить запрос в параллельном потоке чтоб форма не залипала. Можете помочь примером..
ANB (2008-02-29 16:16:00) [1]
> q1485 (29.02.08 13:50) [4]
И одак и доа прекрасно работают асинхронно в основном потоке.
А вот при использовании в потоках могут выкинуть проблему. Как минимум сессию в потоке точно заводить еще одну придется. И снять запрос при этом все равно корректно не сможешь.
Сергей М. (2008-02-29 14:10:00) [2]
> Palladin © (29.02.08 14:09) [19]
Она уже тут корни пустила как у тысячелетнего баобаба)
Palladin (2008-02-29 14:09:00) [3]
> http://www.delphimaster.ru/articles/thread/index.html
как Максим допустил эту статью на сайт, до сих пор загадка...
вот что читать нужно
http://www.delphimaster.ru/articles/panov/
Сергей М. (2008-02-29 14:08:00) [4]
> http://www.delphimaster.ru/articles/thread/index.html
Притча во языцех)
> думал кваери - совместный ресерс
Но это же вовсе не означает, что его никак нельзя защитить, кроме как только с использованием Synchronize()
q1485 (2008-02-29 14:04:00) [5]
> А что с ними не так ?
Я думал кваери - совместный ресерс. Создал там, юзаю в другом месте..
http://www.delphimaster.ru/articles/thread/index.html
:)
Сергей М. (2008-02-29 14:04:00) [6]
> q1485 (29.02.08 14:02) [14]
Про Оракл не знаю. Но, подозреваю, что это и Оракла касается.
Сергей М. (2008-02-29 14:03:00) [7]
> а как же совместные ресурсы
А что с ними не так ?
> В-третьих, из этих процессов
Ты где это вычитал ? Там же где и пример взял ?
Не кури эту траву)
q1485 (2008-02-29 14:02:00) [8]Не, Oracle... Session только.....
Сергей М. (2008-02-29 14:00:00) [9]Мало того, потребуется еще и Database с Session (если они у тебя явно используются) в том же доп.потоке создавать/активировать. Речь-то, вероятно, идет о BDE ?
q1485 (2008-02-29 14:00:00) [10]
> Иначе весь смысл тобой задуманного теряется ..
М... а как же совместные ресурсы...
Меня это убедило что все будет нормально...
В-третьих, из этих процессов можно легко получить доступ ко всем глобальным данным программы, т.к. класс процесса является, по сути, просто частью программы - обычным юнитом (unit).
Сергей М. (2008-02-29 13:57:00) [11]
> Кваери надо создавать и выпонять в дополнительном?
Разумеется !
Иначе весь смысл тобой задуманного теряется ..
q1485 (2008-02-29 13:56:00) [12]
> Раз знал, зачем тогда делал ?)
Что вычитал, то сделал........ я пока другого не знаю.
q1485 (2008-02-29 13:55:00) [13]Всмысе что...
Кваери надо создавать и выпонять в дополнительном?
И не понял...
Сергей М. (2008-02-29 13:55:00) [14]
> Так и знал
Раз знал, зачем тогда делал ?)
Сергей М. (2008-02-29 13:52:00) [15]Он, запрос этот, у тебя в основном потоке выполняется, а не в дополнительном.
Как же при этом форме не "залипать" ?
q1485 (2008-02-29 13:51:00) [16]>> Сергей М. © (29.02.08 13:49) [2]
Я так и подумал...
>> ANB (29.02.08 13:50) [3]
Я не читал, но извратился-я.. )
Palladin (2008-02-29 13:51:00) [17]
> Сергей М. © (29.02.08 13:49) [2]
как говорится великий Synchronize и Сергей М. пророк его :)))
q1485 (2008-02-29 13:50:00) [18]Так и знал.. )
unit Unit2;
interface
uses
Classes;
type
TQQQ = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
public
procedure Exec;
end;
implementation
uses Unit1;
{ TQQQ }
procedure TQQQ.Exec;
begin
try
Form1.OQuery1.Tag:=0;
Form1.OQuery1.Open;
Form1.OQuery1.Tag:=1;
except Form1.OQuery1.Tag:=666; end;
Terminate;
end;
procedure TQQQ.Execute;
begin
{ Place thread code here }
Synchronize(Exec);
end;
end.
============================================
QQQ:=TQQQ.Create(True);
........
OQuery1.Tag:=0;
if QQQ.Suspended then QQQ.Resume;
while OQuery1.Tag=0 do begin
Application.ProcessMessages;
end;
if OQuery1.Tag<>1 then RaiseException(0,0,0,0);
........
QQQ.Free;
ANB (2008-02-29 13:50:00) [19]
> Не получается выполнить запрос в параллельном потоке
Не надо выполнять запрос в параллельном потоке. Пользуйся асинхронным режимом, только посмотри в справке, как правильно ожидать окончания выполнения.
Сергей М. (2008-02-29 13:49:00) [20]
> q1485 (29.02.08 13:31)
Корень зла, скорей всего, в Synchronize(DoWork)
)