![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пграмма "замерзает" пока TThread не завершится [WinXP]
гия © (2011-12-28 12:44:00)Здравствуйте
Пишу пограмму в Дельфи ХЕ под Windows XP в которой приходится выполнять долгие селекты.
Чтобы программа не "замерзала" пока селект не выполнится написал обработчик
procedure Button1Click(Sender: TObject);
begin
with Query do begin
Close;
SQL.Clear;
SQL.Add('SELECT .....');
TMyThread.Create(Query);
Application.ProcessMessages;
end;
end;
TMyThread описан следующим образом:
unit uMyThread;
interface
uses
Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF}, Ora, Unit1;
type
TMyThread = class(TThread)
private
FQuery: TOraQuery;
protected
procedure Execute; override;
public
constructor Create(Query: TOraQuery);
end;
implementation
{ TMyThread }
constructor TMyThread.Create(Query: TOraQuery);
begin
inherited Create(False);
FQuery := Query;
Priority := tpNormal;
FreeOnTerminate:= True;
// Resume;
Execute;
end;
procedure TMyThread.Execute;
begin
NameThreadForDebugging('MyThread');
{ Place thread code here }
FQuery.Open;
end;
end.
Однако программа все равно "замерзает" пока селект не выполнится.
Что надо сделать что бы селект реально выполнялся бы в "background"-е, а прграмма продолжала бы выполнять другие вещи
Медвежонок Пятачок (2011-12-28 13:17:00) [21]твой экзекут вызван из главного потока а значит и выполняется в нем.
а это значит что сам поток теперь нахрен не нужен.
его можно просто выкинуть, и просто вызывать FQuery.Open из главного
RWolf (2011-12-28 13:11:00) [22]надо правильно использовать класс TThread.
пример есть в Demos\Threads.