Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.05.18;
Скачать: [xml.tar.bz2];

Вниз

Как сделать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.062 c
6-1185251532
Inearthed
2007-07-24 08:32
2008.05.18
Продолжение пересылки файлов на FTP после обрыва связи


2-1208423516
Зоо
2008-04-17 13:11
2008.05.18
Выделить строку в DBGRIDEX


15-1207069375
TIF
2008-04-01 21:02
2008.05.18
1 апреля - ФИНАЛ БЛИЗОК... Включите "Время" на Первом


3-1197827256
Kley
2007-12-16 20:47
2008.05.18
Возврат товара


15-1204371798
AET
2008-03-01 14:43
2008.05.18
из ASM в Pascal





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский