Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
4-1171270394
Чапаев
2007-02-12 11:53
2007.07.29
Как потоку получить оповещение о выходе из suspend?


2-1183492895
TStas
2007-07-04 00:01
2007.07.29
Почему у TString property Objects, а нет Pointers?


2-1183419596
DagOT-R
2007-07-03 03:39
2007.07.29
Всё о трее


1-1179652280
seRioUS
2007-05-20 13:11
2007.07.29
Выподающий список выбота толщины линии


1-1179734532
Циркуль
2007-05-21 12:02
2007.07.29
TBitmap не выводится на принтер





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