Главная страница
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.49 MB
Время: 0.026 c
3-1118525726
Erich
2005-06-12 01:35
2005.07.25
Ошибка при получении значения генератора


1-1120731491
Kyro
2005-07-07 14:18
2005.07.25
Точностьтипа риал


1-1120415849
Trubis
2005-07-03 22:37
2005.07.25
устанавливаю длину динамического массива и вылетаю :(


6-1113448443
NikNet
2005-04-14 07:14
2005.07.25
WinSock2 на чистом API без форм! Может у кого заволялось?


1-1120677761
vova3085
2005-07-06 23:22
2005.07.25
поиск в ListBox