Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
1-61671
pumba
2002-12-08 09:12
2002.12.19
Еще одна сложная задача!!!!


6-61729
Юрий
2002-10-24 05:31
2002.12.19
TClientSocket в компоненте


1-61573
kepten
2002-12-09 07:40
2002.12.19
Borland kylix


3-61430
vaneks
2002-11-26 13:17
2002.12.19
Уникальный индефикатор?


3-61413
Diouzshev
2002-11-27 18:57
2002.12.19
Странно ведет себя цикл while not DataSet.Eof do





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский