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

Вниз

выход из процедуры   Найти похожие ветки 

 
ed_209   (2002-09-14 05:18) [0]

есть такой код, работает при нажатии на кнопку Старт:
for i:=0 to lbengines.Items.Count -1 do
begin
dosearch(lbengines.Items[i]);
frmstatus.lbOps.Items.Add(lbengines.Items[i]+": search finished");
end;
frmstatus.lbOps.Items.Add("Done!");
...

в процедуре dosearch() идет работа с файлами (довольно долго).. Как при нажатии на кнопку Стоп в любой момент времени выйти из этой процедуры?


 
Poirot   (2002-09-14 07:46) [1]

Ну у меня пока единственный вариант!!! Создать бул перел и проверять её значение если при клике на другую кнопку оно станет напр Тру, то делаем Break


 
Mystic   (2002-09-14 07:55) [2]

Самое простое
1) в теле цикла вставлять Application.ProcessMessages
2) а также создать Bool переменную и ее проверять, как уже говорили.

Хотя грамотнее (при более менее нетривиальныз задачах) оформить отдельным потоком


 
ed_209   (2002-09-15 07:43) [3]

1) если делать Bool, то проверку придется вставлять чуть ли не в каждую строку
2) если отдельным потоком - напр. dosearch_thread.execute то сразу же выполняются строки с search finished и Done!
может еще как можно?


 
Mystic   (2002-09-15 09:26) [4]

1) Почему чуть ли не в каждую строку? Есть же действия, которые постоянно выполняются (открытие файла, например)?
2) Если отдельным потоком, то все равно прийдется проверять Terminated. TerminateThread лучше не пользоваться. Но почему сразу выполняется Done? Может ты ошибся где?


 
Сергей Медяник   (2002-09-15 09:41) [5]

Я использую:

> Mystic © (14.09.02 07:55)
> Самое простое
> 1) в теле цикла вставлять Application.ProcessMessages
> 2) а также создать Bool переменную и ее проверять, как уже
> говорили.

НО: указанную проверку можно выполнять не на каждую интерацию, чтобы не притормаживала обработка, а ставить в конструкцию
if (i mod ПЕРИОДИЧНОСТЬ)=0 then
begin
Application.ProcessMessages;
if CancelPressedFlag then Break;
end;
- это актуально для циклов с большим числом интераций и недолгой обработкой каждой интерации.

ed_209, тебе не прийдется вставлять проверку в каждой строке, ставь перед самыми долгими вызываемыми процедурами, а можно вообще один раз, главное после Application.ProcessMessages.


 
Gun Expert   (2002-09-15 18:16) [6]

По-моему, можно и таймер использовать для проверки


 
Yaro   (2002-09-15 20:41) [7]

Gun Expert -> мг... молчу


 
ed_209   (2002-09-16 09:25) [8]

ладно... спасибо, попробую что-нибудь



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

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

Наверх




Память: 0.46 MB
Время: 0.006 c
1-85466
Gari
2002-09-16 09:08
2002.09.26
Работа с компонентами


1-85532
Mazenrat
2002-09-12 20:37
2002.09.26
Воспроизведение CD-диска.


1-85516
nikolo
2002-09-17 11:35
2002.09.26
Рекурсивный поиск файлов в подкаталогах


14-85676
spROOT13
2002-09-01 16:14
2002.09.26
*.ha


3-85396
lety
2002-09-05 21:11
2002.09.26
случайные таблицы





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