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

Вниз

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

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

Наверх





Память: 0.46 MB
Время: 0.01 c
9-1112720107
beautyk
2005-04-05 20:55
2005.07.25
помогите написать симулянт игры на фондовой бирже


1-1120656312
Mameluke
2005-07-06 17:25
2005.07.25
Подключение DLL


4-1117289520
EZ@W
2005-05-28 18:12
2005.07.25
Screen Saver


14-1119841484
Skier
2005-06-27 07:04
2005.07.25
В Крым на машине...


11-1103547808
schooll
2004-12-20 16:03
2005.07.25
Прощай КОЛ...





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