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


Автор: InfectedM 9.3.2010, 00:08
ПРограмма постоянно висит в трее,скачивает каждые 60 сек странички, если в этих страничках есть запись YES то программа качает файл и закрывается,если записей нет то снова качает эти файлы и так до бесконечности (пока не будет записи 'YES')
Все это делается в потоке .
Вопрос в следующем,как реализовать проверки ?(если файл не скачался,то скачиваем его повторно)
Знаю что после   except пишем то что будет при ошибки,раньше я там юзал GOTO (с переодресацией на 5 строк вверх),но в потоке не пашет GOTo ,как лучше сделать?

Код

procedure BOT;
var
 
SELFOFF:integer; 
while true do begin
  mem.Clear;
        
//БЕСCКОНЕЧНО СКАЧИВАЕМ ФАЙЛЫ ДО ТЕХ ПОР ПОКА В ФАЙЛЕ 2.php (переменная FILE) не напишем слово  'YES'
         try
         OUT:=trim(http.Get('www.ya.ru/1.php'));
         except //// 
         
         form1.memo2.Lines.add('НЕУДАЛОСЬ СКАЧАТЬ 1.php');
      
         end;  ////  


         try
         FILE:=trim(http.Get('www.ya.ru/2.php'));
         except //// 
      
         form1.memo2.Lines.add('НЕУДАЛОСЬ СКАЧАТЬ 2.php');
        
         end;  ////  


 
         try
         TIME:=trim(http.Get('www.ya.ru/3.php'));
         except //// 
        // bot;
         form1.memo2.Lines.add('НЕУДАЛОСЬ СКАЧАТЬ 3.php');
        // break;
         end;  ////  

 
 

if FILE='yes' then begin //  
   
   SELFOFF:=1;//Если 1 то после цикла програма завершиться
  break; //ПОСЛЕ ТОГО КАК СКАЧАЛ ФАЙЛ, ВЫХОДИМ Из While true do....
end;   // 

sleep(60000); //Ждем 1 мин,после чего снова проверяем скачиваем файлы и проверяем записи в них
end;//   end 'while true '

 
 
if selfoff = 1 then begin  close;     
 


end;


procedure TMyThread.Execute;
begin
 
bot
end;

Автор: Coder 9.3.2010, 04:24
Код

type
    TFileStatus = record
        FileName    : string;
        Status    : string;
        Download    : boolean;
    end;
    
var
    fs : array[1..3] of TFileStatus;    // 
    
begin
    ZeroMemory(@fs,sizeof(fs));
    
    fs[1].FileName:='1.php';
    fs[2].FileName:='2.php';
    fs[3].FileName:='3.php';
    
    while true do
        begin
            for i:=1 to 3 do
                if not fs[i].Download then
                try
                    fs[i].Status:=trim(http.Get('www.ya.ru/'+fs[i].FileName));    
                finally
                    fs[i].Download:=fs[i].Status='YES';
                end;    
            
            // тут проверям чтобы все fs[i].Download были TRUE    и тогда BREAK
        end
end;

Автор: CodeMonkey 9.3.2010, 10:27
Цитата(InfectedM @  9.3.2010,  00:08 Найти цитируемый пост)
в потоке не пашет GOTo

P.S. goto пашет где угодно. А вы, скорее всего, пытаетесь передать управление из защищённого try-ем блока во вне - это вообще нигде не будет работать.

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