Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];

Вниз

Как лучше организовать показ состояния процесса   Найти похожие ветки 

 
AFrolov   (2002-11-06 11:36) [0]

Вопрос уже не новый, но все же:
Есть длительная процедура (для меня она черный ящик) которую мне надо применить к набору объектов. Как сделать так чтобы во время выполнения процедуры на форме отображалось время с начала процесса и пользователь имел возможность нажать кнопку пауза на той же форме.
На сколько я знаю для этого надо процедуру которая выполняет работу вынести в отдельный поток. Не подскажете ли как лучше всего все это организовать?
Заранее спасибо.


 
Внук   (2002-11-06 11:41) [1]

Для начала вопрос - этот "черный ящик" орудует объектами VCL?


 
Bis   (2002-11-06 11:43) [2]

по любому будет орудовать, раз вывод нужен


 
Skier   (2002-11-06 11:44) [3]

>AFrolov

> На сколько я знаю для этого надо процедуру которая выполняет
> работу вынести в отдельный поток.

Совершенно УГУ.
И если наботаешь с VCL - не забудь про Synchronize(...)


 
Внук   (2002-11-06 11:44) [4]

Не по-любому. Важно имеено то, что в "черном ящике" :)) И я так понимаю, что ее исходников нет?


 
AFrolov   (2002-11-06 11:47) [5]

2 > Внук © (06.11.02 11:44) Более того это вызов функции Com - объекта.



 
Внук   (2002-11-06 11:49) [6]

Если эта функция использует объекты VCL, помещать в отдельный поток бесмысленно, ибо все равно придется синхронизировать с главным...
В противном случае можно говорить дальше...


 
Alex4444444444   (2002-11-06 11:50) [7]

Ona dlitel"naya dlya KAZHDOGO objecta ili dlya nabora? Esli s odmin objectom mozhno podozhdat", to, mozhet, prosto Application.ProcessMessages mezhdu objectami?


 
AFrolov   (2002-11-06 12:02) [8]

И еще сразу 2 вопроса:
1. Как лучше передавать параметры в поток, т.к. мне надо вызывать рабочую процедуру с параметрами и получить то что эта процедура вернула.
2. как лучше дожидаться завершения выполнения метода Execute потока?

Вот примерная схема как я это себе представляю (если она не лучшая подскажите другую):

//Код метода Execute потока
procedure TWorkThread.Execute;
begin

MyProc(...);

end;


procedure TForm1.Button1Click(Sender: TObject);
var
Thread:TWorkThread;
begin


for i:=1 to count do
begin
Thread:=TWorkThread.Create(false);
// передача параметров

While () //Здесь надо узнавать работает ли еще метод execute у потока
begin
Application.ProcessMessages();//Чтобы пользователь мог кнопки жать
..// показ времени
end;
//Здесь хотелось бы получить результаты работы потока
Thread.Destroy();
end;

end;


 
AFrolov   (2002-11-06 12:04) [9]

> Alex4444444444 (06.11.02 11:50) она длительная для каждого объекта (приблизительно 1 минута) и просто Application.ProcessMessages(); не отделаешься.


 
Внук   (2002-11-06 12:10) [10]

Параметры передавать и возвращать лучше через переменные объекта TThread
А цикл я бы сделал типа
Sleep(10); if MyThread.Terminated...
потому как WaitFor здесь не очень подходит, imho.
Только этот флажок (Terminated) не забывать выставлять и не делать самоуничтожающийся поток.


 
Внук   (2002-11-06 12:11) [11]

И как все таки насчет VCL-объектов?
При этом

Thread:=TWorkThread.Create( True);
Передача параметров
TWorkThread.Resume



 
Skier   (2002-11-06 12:12) [12]

>AFrolov

> 1. Как лучше передавать параметры в поток, т.к. мне надо
> вызывать рабочую процедуру с параметрами и получить то что
> эта процедура вернула.

Можно передавать параметры в поток в его конструкторе.

> 2. как лучше дожидаться завершения выполнения метода Execute
> потока?

OnTerminate(...) ?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
6-59312
Bazzik
2002-08-24 15:02
2002.11.18
Как узнать объем internet-трафика


3-59030
Mashinist
2002-10-26 13:15
2002.11.18
Сохранение данных в DBF


14-59401
dimonf
2002-10-31 08:45
2002.11.18
Посоветуйте программу для коталогизации документации.


14-59368
vajo
2002-10-29 08:05
2002.11.18
MPEG4


1-59271
Новачок
2002-11-07 13:29
2002.11.18
Простой вопрос





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский