Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2016, 18:22   #1
brownb
Форумчанин
 
Регистрация: 16.10.2016
Сообщений: 157
По умолчанию Зависание программы

Код:
procedure TForm1.Button1Click(Sender: TObject);
var str:string;
begin
str:=edit1.text;
if str[length(str)]='/' then
setlength(str,length(str)-1);
host:=str;
pars(edit1.text);
end;
function TForm1.duble(const line: string):boolean;
var i:integer;
begin
for i:=0 to memo1.Lines.Count-1 do
  if memo1.Lines[i]= line then begin
  result:=true; break; end else result:=false;
end;

procedure TForm1.pars(url: string);
var list:Tstringlist;
reg:TRegExpr;
begin
inc(q);
URLDownloadToFile(nil,Pchar(url),pchar('index'+inttostr(q)+'.html'),0,nil);
list:=Tstringlist.Create;
reg:=TRegExpr.Create;
if FileExists('index'+inttostr(q)+'.html') then
list.LoadFromFile('index'+inttostr(q)+'.html') else exit;

reg.Expression:='[a][\s]{1,}(href=")([^"]+)';
if reg.Exec(list.Text) then
Repeat
  if (reg.Match[2]<>'#')and(not duble(reg.Match[2])) then begin
  memo1.Lines.Add(reg.Match[2]);
  Application.ProcessMessages;
  label1.Caption:=inttostr(memo1.Lines.Count+1);
      if reg.Match[2][1]='/' then
          pars(host+reg.Match[2])
     else if ((copy(reg.Match[2],1,4)='http') and (Pos(host, reg.Match[2])>0)) then
          pars(reg.Match[2])
      else
          pars(host+'/'+reg.Match[2]);
      end;
 Until not reg.ExecNext else ShowMessage('Ã*Ã¥Ã*');

//DeleteFile('index'+inttostr(q)+'.html');
list.Free;
reg.Free;

end;
initialization
q:=0;
В программировании не силен )по этому прошу помощи профессионалов))в общем код работает вот только программа зависает и ее не выключить(если только убить процесс) как избаться от этого злодеяния?
brownb вне форума Ответить с цитированием
Старый 11.12.2016, 20:24   #2
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Добавить в цикл Application.ProcessMessages. В своё время она в этом помогала.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 11.12.2016, 20:49   #3
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

саша40, она там уже есть.
northener вне форума Ответить с цитированием
Старый 11.12.2016, 21:18   #4
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Может тогда проблема в функции Double? По факту только на неё прям активно глаз ложится.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 12.12.2016, 01:25   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

А что, поставить бряку и пройтись по шагам религия не позволяет?
kropotkina-alice вне форума Ответить с цитированием
Старый 12.12.2016, 02:48   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

При "зависании" бряка не всегда помогает.
Сначала нужно понять причину "зависания", а уж после становится ясно где и с какими параметрами бряку нужно было ставить чтобы понять причину.
northener вне форума Ответить с цитированием
Старый 12.12.2016, 11:26   #7
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Сначала нужно понять причину "зависания", а уж после становится ясно где
Да тут вроде очевидно...
Единственное "узкое" место - цикл REPEAT...UNTIL...
kropotkina-alice вне форума Ответить с цитированием
Старый 12.12.2016, 11:39   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

ЧИТАЕМ соообщения Warring компилятора.
Цитата:
[Warning] Unit1.pas(33): Return value of function 'TForm1.duble' might be undefined
если цикл НИ разу не выполниться, то и результата нет.
результат не тот, нет выхода из цикла repeat
нет выхода, программа "висит" .
он всегда выполняется.
не будьте так в это уверены.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 12.12.2016 в 11:42.
evg_m на форуме Ответить с цитированием
Старый 12.12.2016, 12:28   #9
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Код:
if reg.Exec(list.Text) then
Repeat
  if (reg.Match[2]<>'#')and(not duble(reg.Match[2])) then 
  begin
...
  end;
 Until not reg.ExecNext
Ну, и что будет, если условие
Код:
if (reg.Match[2]<>'#')and(not duble(reg.Match[2])) then
никогда не выполнится?
Вот вам и "бесконечный цикл"...
Цитата:
Сообщение от evg_m Посмотреть сообщение
ЧИТАЕМ соообщения Warring компилятора.
если цикл НИ разу не выполниться, то и результата нет
По умолчанию Result будет равен False.
Так что это не есть источник проблемы.

Последний раз редактировалось kropotkina-alice; 12.12.2016 в 13:33.
kropotkina-alice вне форума Ответить с цитированием
Старый 12.12.2016, 12:47   #10
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Я же говорил, что проблема там.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание программы. stlcrash Общие вопросы Delphi 13 09.06.2016 15:59
MFC зависание программы Kukurudza Общие вопросы C/C++ 8 17.02.2012 21:41
Зависание программы. kardinal94 Общие вопросы Delphi 2 23.08.2010 17:36
CriticalSection -> зависание программы PUH Помощь студентам 1 05.11.2009 13:19