Главная страница
    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.46 MB
Время: 0.035 c
15-1183108237
Skyle
2007-06-29 13:10
2007.07.29
DataSnap(Midas) и Turbo Delphi for Win32 Pro. Возможно ли?


15-1183375146
White Barsik
2007-07-02 15:19
2007.07.29
LHA библиотека


2-1183635903
zapis
2007-07-05 15:45
2007.07.29
Узнать что добавлена запись


15-1183449672
Inco
2007-07-03 12:01
2007.07.29
Проблема с цветом в TurboExplorer


15-1182909688
koha
2007-06-27 06:01
2007.07.29
можно ли скаченные архивы форума подсунуть в DMClient?





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