Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.18;
Скачать: CL | DM;

Вниз

Как сделать thread так, чтобы вып-ся в нем SQLзапр не вешал проу   Найти похожие ветки 

 
VlGrig   (2008-04-17 16:07) [0]

Здравствуйте!!! Така проблема: выполняю SQL запрос в Thread-e в отдельном окне (fsStayOnTop), но пока запрос не выполнится, программа висит и это окно торчит на экране куда бы не переключался. Как можно это окно убрать при переключении на др.прогу, и вообще, почему Thread не выполняется отдельным фоновым потоком ?


 
Сергей М. ©   (2008-04-17 16:10) [1]


> почему Thread не выполняется отдельным фоновым потоком ?


Дай дагадаюсь - потому что Synchronize(DoWork) ?

))


 
Palladin ©   (2008-04-17 16:11) [2]

потому что ты тупо бездумно написал Synchronize


 
Игорь Шевченко ©   (2008-04-17 16:21) [3]

Не сокращ.


 
Оригинал   (2008-04-17 16:23) [4]


> VlGrig   (17.04.08 16:07)  
> Здравствуйте!!! Така проблема: выполняю SQL запрос в Thread-
> e в отдельном окне (fsStayOnTop), но пока запрос не выполнится,
>  программа висит и это окно торчит на экране куда бы не
> переключался. Как можно это окно убрать при переключении
> на др.прогу, и вообще, почему Thread не выполняется отдельным
> фоновым потоком ?


А код засекречен?


 
Kolan ©   (2008-04-17 16:26) [5]

> в Thread-e в отдельном окне (fsStayOnTop)

Казалось бы как они связаны :)


 
Anatoly Podgoretsky ©   (2008-04-17 16:52) [6]

> Palladin  (17.04.2008 16:11:02)  [2]

Не тупо, а тщательно скопировал, сами знаете откуда.


 
Kolan ©   (2008-04-17 16:53) [7]

> Не тупо, а тщательно скопировал, сами знаете откуда.

А говорят с господином «сами знаете откуда» даже разговаривали на форуме. Интересно что он ответил? Мож есть ветка?


 
VlGrig   (2008-04-17 17:08) [8]

Я вообще-то первый раз пыиаюсь использовать THread
вот код программы

type
 TSQLThread = class(TThread)
 private
   qrSQL: TQuery;
 protected
   procedure Execute; override;
 public
   constructor Create( AqrSQL: TQuery ); virtual;
 end;

//----------------------------------------------------

constructor TSQLThread.Create(AqrSQL: TQuery);
begin
 inherited Create(True);
 FreeOnTerminate:=True;
 qrSQL:=AqrSQL;
end;

procedure TSQLThread.Execute;
begin
 qrSQL.Open;
end;

//----------------------------------------------------
procedure TMyProg.sbExecClick(Sender: TObject);
begin
 FSQLThread:=TSQLThread.Create(qrSQL);
 FSQLThread.Priority:=tpLower;
 FSQLThread.Resume;
end;


 
Kolan ©   (2008-04-17 17:09) [9]

> qrSQL.Open;

А к этому запросу что подключены контролы ?


 
Сергей М. ©   (2008-04-17 17:12) [10]


> Palladin ©   (17.04.08 16:11) [2]


Эк мы с тобой облажались !)


 
VlGrig   (2008-04-17 17:14) [11]

К запросу подключен DBGrid, но не в этом дело
доле в том, что пока запрос не выполнится, прога висит,
а хотелось бы что-то вроде application.ProcessMessages


 
VlGrig   (2008-04-17 17:18) [12]

а как писать Synchronize, по хелпу ему надо указывать проседуру,
а конкретной процедуры-то нет?


 
Сергей М. ©   (2008-04-17 17:19) [13]


> К запросу подключен DBGrid, но не в этом дело


Как это не в этом ? Оч даже в этом !
Отключи запрос от DataSource и убедись в обратном...


 
Palladin ©   (2008-04-17 17:19) [14]


> Сергей М. ©   (17.04.08 17:12) [10]

и не говори... как быки на красную тряпку :)


 
Сергей М. ©   (2008-04-17 17:23) [15]


> VlGrig   (17.04.08 17:18) [12]
>
> как писать Synchronize


Строго наоборот - эту траву лучше не курить, а если и курить, то строго по рецепту)


 
sniknik ©   (2008-04-17 17:23) [16]

хотели на Архангельского все свалить? а вот не вышло! ;)


 
Сергей М. ©   (2008-04-17 17:26) [17]


> sniknik ©   (17.04.08 17:23) [16]


Архангельский с Карихом предусмотрительно сделали ноги, перед этим, вероятно,  предупредив автора топика, что бить за это будут больно и возможно ногами)


 
Kolan ©   (2008-04-17 17:32) [18]

> хотели на Архангельского все свалить?

Нам только дай повод :)


 
VlGrig   (2008-04-17 17:34) [19]

Я понимаю что курить по рецепту, а как по рецепту,
если можно маааленький примерчик!


 
Palladin ©   (2008-04-17 17:36) [20]

Можно
%DELPHI%\Demos\Threads\


 
ANB   (2008-04-17 17:39) [21]


> Palladin ©   (17.04.08 17:36) [20]
> Можно
> %DELPHI%\Demos\Threads\

Но не всегда нужно. Лучше всего использовать асинхронные режимы работы используемых компонентов. Если они их поддерживают.
Однако не озвучена ни СУБД ни используемая библиотека для доступа к ней.


 
Palladin ©   (2008-04-17 17:42) [22]


> Лучше всего использовать асинхронные режимы работы используемых
> компонентов.

банальное высказывание никаким боком примера использования synchronize не касающееся...

вот еще пример построения наследника TThread
http://www.delphimaster.ru/articles/panov/


 
VlGrig   (2008-04-17 17:57) [23]

Спасибо. добавил в Execute методе вызов процедуры родительской формы в которой стоит Application.ProcessMessages;
вроде работает.


 
ANB   (2008-04-17 18:02) [24]


> банальное высказывание никаким боком примера использования
> synchronize не касающееся...

Зато не развивающее дальше дурной подход к асинхронному выполнению запроса.

НЕ НУЖЕН ДОПОЛНИТЕЛЬНЫЙ ПОТОК ДЛЯ ТОГО, ЧТОБЫ ПРИЛОЖЕНИЕ НЕ ВИСЕЛО ВО ВРЕМЯ ВЫПОЛНЕНИЯ ЗАПРОСА.

Соответственно не нужно работать с синхронизе и изучать работу с потоками.


 
sniknik ©   (2008-04-17 18:04) [25]

> вроде работает.
с таким подходом это просто чудо...


 
Palladin ©   (2008-04-17 18:11) [26]


> ANB   (17.04.08 18:02) [24]

то бишь, я, такой негодяй, дал плохой совет. автор спросил можно ли примерчик, я сказал можно и дал, но ANB сказал "не нужно"

может вообще, отныне, всем не нужно давать на форуме советы по использованию Synchronize, ведь подобные советы разовьют дальше дурной подход у всех...


> VlGrig   (17.04.08 17:57) [23]

с чего ты так вдруг в этом уверен, что работает....


 
ANB   (2008-04-17 18:25) [27]


> то бишь, я, такой негодяй, дал плохой совет. автор спросил
> можно ли примерчик, я сказал можно и дал, но ANB сказал
> "не нужно"

:) Именно. Если бы автору действительно нужно было корректно работать с потоками, твой пример был бы в самую тему.
В данном же случае (как и в большинстве других) более правильное решение - отказаться от использования доп. потоков.


 
Anatoly Podgoretsky ©   (2008-04-17 18:43) [28]

> Kolan  (17.04.2008 17:32:18)  [18]

А зачем нам повод?


 
Anatoly Podgoretsky ©   (2008-04-17 18:45) [29]

> Palladin  (17.04.2008 18:11:26)  [26]

В смысле Хихи, Хаха


 
Оригинал   (2008-04-17 19:10) [30]


> VlGrig   (17.04.08 17:57) [23]
> Спасибо. добавил в Execute методе вызов процедуры родительской
> формы в которой стоит Application.ProcessMessages;
> вроде работает.


Не может работать с Application.ProcessMessages.
Падать будет в самый неподходящий момент.
Либо в Synchronize выполнять.


 
Сергей М,   (2008-04-17 19:55) [31]


> VlGrig   (17.04.08 17:34) [19]
>
> Я понимаю что курить по рецепту


Не курил и не кури).. Не надо).. Пока)..

Ты [13] опробовал ?

Ждем-с ..


 
VlGrig   (2008-04-18 10:33) [32]

Спасибо всем! Ссылка на статью Панова помогла. Разобрался что к чему и как надо травку курить и откуда дым пускать (и стоит ли вообще)
Ха-ха и хи-хи три раза :)))



Страницы: 1 вся ветка

Текущий архив: 2008.05.18;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.021 c
3-1197439688
Flok
2007-12-12 09:08
2008.05.18
выборка случайных неповтоярющихся значиений из базы данных


15-1207246196
oldman
2008-04-03 22:09
2008.05.18
А "день радио" профессиональный праздник?


15-1207050353
snake-as
2008-04-01 15:45
2008.05.18
Графический редактор


2-1208935136
Arinyshka
2008-04-23 11:18
2008.05.18
Динамически созданный Image


2-1208536526
worldmen
2008-04-18 20:35
2008.05.18
Загрузить файл из Worda и редактировать.