Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.19;
Скачать: 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 вся ветка

Текущий архив: 2002.12.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
1-61545
tga
2002-11-28 06:51
2002.12.19
Помогите! плиззз. Execel не закрывается!!!


1-61670
pumba
2002-12-08 09:14
2002.12.19
Третья сложная задача!!!! Помогите хотябы с одной!!! Limit часов!


6-61726
urich
2002-10-22 14:10
2002.12.19
Ребята! Помогите с загрузкой файла!


7-61851
tovSuhov
2002-10-16 13:23
2002.12.19
Аналог /dev/hda1 в Винде...


14-61795
Слесарь Матерящийся
2002-11-28 13:47
2002.12.19
Очень нужная программа