Форум: "Основная";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];
ВнизФорма в отдельном потоке Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c