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

Вниз

Зависание формы   Найти похожие ветки 

 
Proz2   (2005-07-07 14:48) [0]

Запускаем SQL запрос. Во время его выполнения форма перестает отвечать. Application.ProcessMessages не помогает, в т.ч. по таймеру. Threads не предлагать, т.к. поток нужен всего один, а как определить его завершение я не знаю. Delphi 7.


 
Digitman ©   (2005-07-07 14:52) [1]


> Threads не предлагать, т.к. поток нужен всего один


либо применяй асинхронные запросы (если СУБД позволяет), либо нужен более чем один трэд, либо - смирись


> как определить его завершение я не знаю


кого "его" ? трэда ? исполнения запроса ?


 
Proz2   (2005-07-07 15:29) [2]

> кого "его" ? трэда ? исполнения запроса ?

Именно


 
Digitman ©   (2005-07-07 15:35) [3]


> Именно


что "именно"-то ?

именно "трэда" или именно "исполнения запроса" ?


 
Proz2   (2005-07-07 16:06) [4]

трэда


 
Digitman ©   (2005-07-07 16:11) [5]

MyThread := TMyThread.Create(...);
try
 while not Application.Terminated do
   case MsgWaitForMultipleObjects(1, MyThread.Handle, False, INFINITE, QS_ALLINPUT) of
     WAIT_OBJECT_0: break;
     WAIT_OBJECT_0 + 1: Application.ProcessMessages;
   end;
finally
 MyThread.Free;
end;


 
Proz2   (2005-07-07 16:31) [6]

Пардон за чайниковость. Если не сложно, то увидеть бы это дело с описанием type, constructor и прочими объявлениями. Нашел в интернете единственный пример применения threads, повторяющийся на многих страницах, но в том виде он у меня не работает.

На самом деле, мне нужно следующее:
Есть список username"-ов, беру первое, делаю запрос, вываливаю его в dbgrid. Во время выполнения запроса, основная форма должна отвечать. Пока не выполнится запрос и не закроется поток, следующий запрос выполнятся не должен. Когда запрос отработает первое имя, форма модифицируется, и выполняется следующий username. Т.е. что-то в виде:

for a:=1 to listbox.items.count-1 do
begin
 Query.SQL.Text="select * from table where username=[+listbox.items[a]];
 Query.Open;
 showmessage("ok");
end;

Только чтобы форма отвечала во время выполнения запроса.


 
Digitman ©   (2005-07-07 16:41) [7]

примерно так это может выглядеть :

type

TMyThread = class(TThread)
private
  FQuery: TQuery;
protected
  procedure Execute; override;
public
  constructor Create(Query: TQuery);
end;

..

constructor TMyThread.Create(Query: TQuery);
begin
 FQuery := Query;
 inherited Create(False);
end;

procedure TMyThread.Execute;
begin
 Query.Open;
end;

..
var
 MyThread: TMyThread;

for a:=1 to listbox.items.count-1 do
begin
DBGrid.DataSource.DataSet := nil;
Query.SQL.Text="select * from table where username=[+listbox.items[a]];

MyThread := TMyThread.Create(Query);
try
 while not Application.Terminated do
   case MsgWaitForMultipleObjects(1, MyThread.Handle, False, INFINITE, QS_ALLINPUT) of
    WAIT_OBJECT_0: break;
    WAIT_OBJECT_0 + 1: Application.ProcessMessages;
   end;
finally
 MyThread.Free;
end;
DBGrid.DataSource.DataSet := Query;
showmessage("ok");
end;


 
Proz2   (2005-07-07 16:54) [8]

Очень благодарен, стал немного понимать, только вот:

case MsgWaitForMultipleObjects(1, MyThread.Handle,* False, INFINITE, QS_ALLINPUT) of

[Error]:Constant object cannot be passed as var parameters

* - указано, где компилятор устанавливает курсор.


 
Digitman ©   (2005-07-07 17:05) [9]

var
 hThread: THandle;
..
 

MyThread := TMyThread.Create(Query);
try
hThread := MyThread.Handle;
while not Application.Terminated do
  case MsgWaitForMultipleObjects(1, hThread, False, INFINITE, QS_ALLINPUT) of
...


 
Proz2   (2005-07-07 17:21) [10]

Огромнейшие спасибо и респект!



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

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

Наверх




Память: 0.47 MB
Время: 0.011 c
1-1120942375
Green_Templar
2005-07-10 00:52
2005.07.25
speedbutton


14-1120546217
kyn66
2005-07-05 10:50
2005.07.25
Программы для работы с ресурсами.


14-1120483185
ПЛОВ
2005-07-04 17:19
2005.07.25
Что делать ума не приложу!


4-1117276299
DeepProg
2005-05-28 14:31
2005.07.25
Drag&Drop с помощью TWMNChitTest


1-1120724743
qwer-10
2005-07-07 12:25
2005.07.25
Проверка в в FindFirst/FindNext.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский