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