Вниз
Скачать: CL | DM;

Форма в отдельном потоке   Найти похожие ветки 

← →
AFrolov ©   (2002-12-09 10:32) [0]

Как лучше это реализовать?
Пробовал так:
Описывал класс формы
type
TfrmProgress = class(TForm)
......
end;
описывал класс потока
type
TDispProgress = class(TThread)
private
{ Private declarations }
protected
frmProgress1: TfrmProgress;
procedure Execute; override;
procedure OnTrminateProcess(Sender: TObject);
end;

procedure TDispProgress.Execute;
begin
{ Place thread code here }
Self.OnTerminate:=OnTrminateProcess;
FreeOnTerminate:=true;
frmProgress1:=TfrmProgress.Create(Nil);
frmProgress1.SetConnection(FormAsServer.ADOConnection1);
frmProgress1.StartTimer();
end;

создаю экземпляр потока
procedure TForm1.BitBtn11Click(Sender: TObject);
var
frmProg:TDispProgress;
begin
frmProg:=TDispProgress.Create(false);
While true do
begin
Application.ProcessMessages();
end;
frmProg.Terminate();
end;

Хотелось бы чтобы появлялась форма(которую я описал ранее) и там по таймеру должны происходить некоторые действия. Пока форма только появляется а с ней ничего путного не происходит - таймер не работает и все приложение подвисает.


← →
AFrolov ©   (2002-12-09 12:20) [1]

??


← →
Виктор Щербаков ©   (2002-12-09 12:29) [2]

Лично я так и не понял, что ты хочешь сделать. И главное ЗАЧЕМ?


← →
Ihor Osov'yak ©   (2002-12-09 12:48) [3]


> Пока форма только появляется а с ней ничего путного не происходит
> - таймер не работает и все приложение подвисает.



Окно создано в отдельном потоке и сообщения для этого окна должны проходить через цикл выборки сообщений этого потока (очень схематично), а у Вас его нету. Кроме того, VCL написана так, что она не рассчитана, что формы могут создаватся в потоке, отличном от главного (проанализируйте код TCustomForm, там очень много явных обращений к цыклу выборки главного потока, тот же Application.ProcessMessages)...

.. Зы, таким извратом как запуск формы в отдельном потоке страдал, но делалось это примерно так: форму в dll, создавался отдельный поток со своим циклом выборки, в этом потоке уже грузилась эта dll и создавались свои "инопоточныеформы"... dll в отдельном потоке лишь лишь для того, чтобы разнести екземпляры TApplication главного приложения и dll (обращение к методам которого с недр формы, созанной в другом потоке рано или поздно произойдет, и которое должно быть выполнено в контексте дополнительного потока - напоминаю - главная инстанция TApplication и в страшном сне не подозревает, что его будут дергать с другого потока, и если сее начать делать - то будет очень много проблем ..)

..Зы2. Но реализация этого несколько геморойна и должно быть очень много веских аргументов, чтобы идти по такому варианту решения...




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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.014 c
4-61879
Брат
2002-11-07 13:02
2002.12.19
Как узнать, занят ли файл каким-нибудь приложением?


7-61844
riland
2002-09-26 08:42
2002.12.19
Еще раз к защите данных


1-61592
sasha_delphi
2002-12-10 12:23
2002.12.19
Чтение из EXCEL файлов.


3-61411
Oleon
2002-12-03 14:28
2002.12.19
FastReport


6-61727
Ag2002
2002-10-23 16:33
2002.12.19
Сетевой файл




   Наверх