Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Приостановить выполнение программы


Автор: Mach3 14.8.2008, 08:11
Привет...
В цикле загружаю вебстраницы...

Код

var links:Tstringlist;
web:string;
begin
Links:=TstringList.Create;
Links.LoadFromFile('...');
For i:=0 to Links.count-1 do begin
web:=idhttp1.get(links[i]);
......
end;
end;

При выполнении программы все стоит колом, окно не двигается...
Хочу сделать кнопку ПАУЗА...
Как приостановить выполнение цикла или загрузку страницы?
И еще вопрос... Если обрывается соединение, вылетает ошибка...
Как сделать условие на ошибку или на удачную загрузку страницы?
Заранее благодарен.

Автор: THandle 14.8.2008, 08:15
Цитата(Mach3 @  14.8.2008,  09:11 Найти цитируемый пост)

При выполнении программы все стоит колом, окно не двигается...


Application.ProcessMessages?

Цитата(Mach3 @  14.8.2008,  09:11 Найти цитируемый пост)
Хочу сделать кнопку ПАУЗА...


Выносить загрузку в отдельный поток, по одной кнопке (СТАРТ) запускать, по кнопке ПАУЗА приостанавливать...

Цитата(Mach3 @  14.8.2008,  09:11 Найти цитируемый пост)
И еще вопрос... Если обрывается соединение, вылетает ошибка...


Ну отлавливай её try/except...

Автор: aleksh 14.8.2008, 09:04
на всякий случай добавлю: Application.ProcessMessages и проверка на нажатие "паузы" следует вставить в цикл, например:
Код

For i:=0 to Links.count-1 do begin
web:=idhttp1.get(links[i]);
if x then
  begin
  ...
  break;
  end;
end;

x -- это boolean, если нажата "пауза" присваивается true. перед break (прерывание цикла) хорошо бы сохранять номер строки, на которой остановились, ибо цикл "приостонавливатся" не умеет, и потомначинать цикл с сохранненого номера (но это смотря для чего нужна пауза)
а вот с паузой загрузки сложнее, да и зачем она?

Автор: Mach3 14.8.2008, 10:55
С циклом разобрался... Спасибо..
А как бороться с тем, что пока загружается страница (idhttp1.get) программа ''зависает''?

Автор: Poseidon 14.8.2008, 10:58
Цитата(Mach3 @  14.8.2008,  10:55 Найти цитируемый пост)
А как бороться с тем, что пока загружается страница (idhttp1.get) программа ''зависает''?
 тебе же ответили:
Цитата(THandle @  14.8.2008,  08:15 Найти цитируемый пост)
Выносить загрузку в отдельный поток


Автор: aleksh 14.8.2008, 11:30
есть опосение, что второй поток не особо поможет, ибо поток для чего именно: очереди закачек (нужна ли она), или под каждую закачку (есть ли резон)?

toMach3: а программа на долго зависает? и каков канал?

Автор: Mach3 14.8.2008, 11:42
зависает на 3-5 секунд при скорости 3 килобайт/сек..
Это загрузка одной страницы + парсинг...
вобщем после нажатия кнопки я через 3-5 сек вижу в мемо1 парсированную страницу...
А вообще программа должна загрузить и обработать более 200 страниц за весь цикл...

Добавлено @ 11:44
Цитата

Выносить загрузку в отдельный поток

Если честно, я плохо понимаю что это значит... 
Может посоветуйте что почитать?

Автор: aleksh 14.8.2008, 11:51
про поточность http://forum.vingrad.ru/forum/topic-60076.html, а вот со скоростью интересней: во-первых скорость канала (аппартная проблема), парсинг (может его можно улучшить, поищите по форуму на тему парсинга), а если текста много -- так это может и из-за memo тормозится.

кстати, а почему memo, а не twebbrouser, что-то спецефичное?

так что, не все так ахово, могло бы быть и медленее...

Автор: Mach3 14.8.2008, 12:13
Спасибо за материал... Читаю, разбираюсь...
Я ничего не могу сделать с программой, пока загружается страница... 
Проверил.... А мемо это так для проверки работоспособности парсера..

Автор: Poseidon 14.8.2008, 13:14
Цитата(aleksh @  14.8.2008,  11:30 Найти цитируемый пост)
есть опосение, что второй поток не особо поможет, ибо поток для чего именно: очереди закачек (нужна ли она), или под каждую закачку (есть ли резон)?
Опасения напрасны. А поток нужно делать как-раз для того кода, который приведен в первом посте. 

Цитата(Mach3 @  14.8.2008,  12:13 Найти цитируемый пост)
Я ничего не могу сделать с программой, пока загружается страница... 
Вот именно от этого тебя и спасет TThread

Автор: aleksh 14.8.2008, 13:34
а что нужно делать с программой, когда она страницы подгружает? лучший (по моему) вариант -- увеличить скорость сети, осталное -- от лукавого.
а можно так сделать: сначала все загрузили, и только потом начинаем парсить? если да, то можно так: поставить счетчик на форме для загруженных станичке, гиф повесить, периодически сообщать что сейчас прога делает. это может показаться смешным, но наблюдения показывают что эти манипуляции повышают быстродействие программы (хоть и восприятие). сказ сей шутка, но в нем намек серьезный

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)