Вниз
Скачать: 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.015 c
3-61421
sen
2002-11-29 14:39
2002.12.19
Активизация запросов


14-61784
Skier
2002-11-28 11:34
2002.12.19
Кто знает эту идею или алгоритм ?


4-61890
Xemax
2002-11-02 15:31
2002.12.19
Время задавать ОЧЕНЬ СЛОЖНЫЕ ВОПРОСЫ !!!!


3-61455
Beglec
2002-11-30 21:04
2002.12.19
не сложный вопрос про сортировку


3-61393
Sras
2002-12-02 10:00
2002.12.19
Help & Manual




   Наверх