Текущий архив: 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.52 MB
Время: 0.045 c