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

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

Запрос в потоке [D7, XP]


Страницы:   1 2

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)

)


Страницы:   1 2

Наверх

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