Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Внизформа-заставка Найти похожие ветки
← →
denis24 (2004-12-07 12:40) [0]Подскажите пожалуста!
На основной форме запускается процедура по обработке данных
Перед ее вызовом создаю и вызываю сабж с анимированым гифом
frmWorking_report:=TfrmWorking_report.Create(self);
try
frmWorking_report.Show;
.
.
.
основная процедура
.
.
.
finally
frmworking_reporp.free;
end;
Все отлично ,но этот анимир гиф прокручивается рывками...
подскажите или киньте плиз ссылку по теме форм-заставок на длит процедуры обраьртки данных
← →
Anatoly Podgoretsky © (2004-12-07 12:43) [1]Смотри в сторону кодовых потоков.
← →
denis24 (2004-12-07 15:15) [2]Помогите еще.
Добавил в проэкт TthreadObject.(Working_report).Подключил к форме где вызывается процедура по обработке данных.
Перед ее вызовом создаю поток.
Thread1:=Working_report.Create(false);
В потоке создал процедуры по показу и уничтожению формы-заставки.
Thread1.Make_form; в теле которых соотв->frmWorking_report.show;
Thread1.Close_form->frmWorking_report.free;
А где создавать эту форму?В Working_report.Execute не получается(frmWorking_report:=TfrmWorking_report.Create(self)). Пишет
Incopatible types Tcomponent and Working_report)
Или я что-то не так делаю?
← →
denis24 (2004-12-07 15:22) [3]Помогите еще.
Добавил в проэкт TthreadObject.(Working_report).Подключил к форме где вызывается процедура по обработке данных.
Перед ее вызовом создаю поток.
Thread1:=Working_report.Create(false);
В потоке создал процедуры по показу и уничтожению формы-заставки.
Thread1.Make_form; в теле которых соотв->frmWorking_report.show;
Thread1.Close_form->frmWorking_report.free;
А где создавать эту форму?В Working_report.Execute не получается(frmWorking_report:=TfrmWorking_report.Create(self)). Пишет
Incopatible types Tcomponent and Working_report)
Или я что-то не так делаю?
← →
denis24 (2004-12-07 15:26) [4]Помогите еще.
Добавил в проэкт TthreadObject.(Working_report).Подключил к форме где вызывается процедура по обработке данных.
Перед ее вызовом создаю поток.
Thread1:=Working_report.Create(false);
В потоке создал процедуры по показу и уничтожению формы-заставки.
Thread1.Make_form; в теле которых соотв->frmWorking_report.show;
Thread1.Close_form->frmWorking_report.free;
А где создавать эту форму?В Working_report.Execute не получается(frmWorking_report:=TfrmWorking_report.Create(self)). Пишет
Incopatible types Tcomponent and Working_report)
Или я что-то не так делаю?
← →
KSergey © (2004-12-07 15:33) [5]Наоборот, в основном потоке создаешь форму, в дополнительном - делаешь необходимые действия.
← →
denis24 (2004-12-07 15:43) [6]Хорошо,а как тогда словить что процедура отработала в дополнительном потоке и пора закрывать эту форму-заставку в основном?
← →
KSergey © (2004-12-07 15:49) [7]Послать сообщение из потока перед завершением, например.
← →
denis24 (2004-12-07 18:58) [8]Делаю так
frmWorking_report:=TfrmWorking_report.Create(self);
try
frmWorking_report.Show;
Thread1:=Working_report.Create(false);
code:=Thread1.WaitFor;
finally
frmWorking_report.Free;
end;
В потоке
procedure Working_report.Execute;
begin
Synchronize(frmChoice_report.make_select_for_report)
end;
Все отлично работает.Но на форме frmWorking_report не крутится анимир гиф,который запущен точно.Проверял создавая эту форму без вызова процедуры
Что то делаю не так?
← →
Юрий Зотов © (2004-12-07 20:31) [9]> denis24 (07.12.04 18:58) [8]
> не крутится анимир гиф
Естественно, Вы же вызвали WaitFor - вот основной поток и встал. И ждет дополнительного. А в дополнительном Вы вызвали Synchronize - и он тоже встал. И ждет основного.
И будут они ждать друг друга вечно. Взаимный deadlock это называется.
> Что то делаю не так?
Да. Вы невнимательно читаете справку.
type
TfrmWorking_Report = class(TForm)
...
public
procedure Working_ReportFinished(Sender: TObject);
...
end;
procedure TfrmWorking_Report.Working_ReportFinished(Sender: TObject);
begin
ModalResult := mrOK
end;
======================================
with TWorking_Report.Create(True), TfrmWorking_Report.Create (nil) do
try
FreeOnTerminate := True;
OnTerminate := Working_ReportFinished;
Resume;
ShowModal
end;
======================================
procedure TWorking_Report.Execute;
begin
... // Никаких Synchronize не нужно
end;
← →
Юрий Зотов © (2004-12-07 20:35) [10]Недописал немного, сорри. Конечно, форму надо уничтожить:
with TWorking_Report.Create(True), TfrmWorking_Report.Create (nil) do
try
FreeOnTerminate := True;
OnTerminate := Working_ReportFinished;
Resume;
ShowModal
finally
Free
end;
← →
jack128 © (2004-12-07 22:05) [11]Юрий Зотов © (07.12.04 20:35) [10]
красиво :-)
← →
denis24 (2004-12-08 09:33) [12]To Юрий Зотов
Спасибо,то что надо.
Но в процедуре которую я вызываю и запускаю во новом потоке используются ado компоненты.И на них виснет.Там нужно что-то сделать с сессиями.Не подскажете?
← →
denis24 (2004-12-08 18:33) [13]Никто не знает других вариантов?
← →
jack128 © (2004-12-08 18:39) [14]CoInitialize вызываешь??
← →
denis24 (2004-12-08 20:08) [15]где его вызывать?
← →
jack128 © (2004-12-08 21:10) [16]в потоке. Если в нем используются ADO Componenets.
procedure TADOThread.Execute;
begin
CoInitialize(0);
try
// тут работаешь с ADO
finally
CoUninitialize
end;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.031 c