Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.29;
Скачать: CL | DM;

Вниз

Как работать с длительными процессами в программе?   Найти похожие ветки 

 
Voproshay   (2007-07-04 05:15) [0]

Под длительными процесами я подразумеваю, например, сканирование файлов на диске, сканирование сети, поиск в больших массивах. Т.е. операции, которые могут длиться и минуту и час, и более, короче длительность их неизвестна.
Чем пользоваться? Циклами или, может быть, таймером? Или есть какие-то другие способы?
Например:
while i<s do
begin
 //а тут выполняемые действия
end;


или вот так?

procedure TForm1.Timer1Timer(Sender: TObject);
begin
//а тут выполняемые действия
end;


 
{RASkov} ©   (2007-07-04 05:30) [1]

TThread? Но может вполне подойти и Таймер.... смотря какая задача...
Например с Таймером можно так:

procedure StartTimer;
begin
 Timer1.Tag:=0;
 Timer1.Enabled:=True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 //а тут выполняемые действия
 if Timer1.Tag>=List.Count then begin Timer1.Enabled:=False; Exit; end;
 Работаем с элементом - List[Timer1.Tag]
 Inc(Timer1.Tag);
end;


List.Add(); - Добавляем элемент(ы)
StartTimer; - Стратуем таймер.

Где List чисто для примера, может быть чем угодно, хоть массивом..... алгоритм измениться в зависимости от задачи...
Но программа будет "тормозить" на момент выполнения Таймер1Таймер, так как его код выполняется в основном потоке, в отличии от TThread...


 
AlexanderMS ©   (2007-07-04 05:31) [2]


> Voproshay   (04.07.07 05:15)  

Что подходит, тем и пользуйтесь. Можно ещё потоки создавать, если, пока идёт длительный процесс, пользователь не должен терять возможность нормально работать с программой.

Только таймер я не знаю зачем.


 
{RASkov} ©   (2007-07-04 05:34) [3]

> Только таймер я не знаю зачем.

В самом деле, чет я с таймером погорячился.... тот же цикл получился, только медленнее... :)


 
Voproshay   (2007-07-05 07:30) [4]

Извините, а вы можете привести простенький пример работы с потоками?
Я ни разу не пользовался, вообще не в курсе что это и зачем. Думаю, что на форуме найдётся много начинающих, которым, как и мне, будет интересна и полезна эта информация. А также на форуме найдётся достаточное количество профессионалов, способных нормально объяснить о потоках.


 
Сергей М. ©   (2007-07-05 09:06) [5]


> Voproshay   (05.07.07 07:30) [4]


В твоем вопросе не прозвучало, что тебя беспокоит в этих самых "длительных процессах". Ну длительные они, ну и что ? Программа что ли "зависает" ? Вставь в тело цикла одну-единственную строчку Application.ProcessMessages - и все ! И программа "оживет" ! И никаких потоков не требуется, тем более что ты "не в курсе что это и зачем", и тем более что "нормальный" рассказ о потоках - это отнюдь не десяток строк текста, а приличная по объему книжная глава.


 
Voproshay   (2007-07-05 10:00) [6]

Хотелось бы чтоб пользователь имел возможность работать во время выполнения  "длительного процесса"


 
Сергей М. ©   (2007-07-05 10:02) [7]


> Хотелось бы чтоб пользователь имел возможность работать
> во время выполнения  "длительного процесса"


Ну так вставь упомянутую строчку в тот самый цикл - и всех делов.

Чем чаще эта строчка будет получать управление, тем быстрее твоя программа будет реагировать на действия юзера.



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

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

Наверх




Память: 0.48 MB
Время: 0.062 c
15-1182947588
TruePunk
2007-06-27 16:33
2007.07.29
wap ресурсы


3-1177169820
Roven
2007-04-21 19:37
2007.07.29
Установка базы данных


15-1183371286
P
2007-07-02 14:14
2007.07.29
Программист, проектирующий довольно уникальную систему, он -


15-1183170285
Ино
2007-06-30 06:24
2007.07.29
Что означает такая запись? Зачем она используется?


15-1183402634
antonn
2007-07-02 22:57
2007.07.29
вопрос по CSS