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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2012, 09:58   #1
just4smth
_____________
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 30
Вопрос [delphi]Исправить код потока

Помогите исправить код потока, подскажите куда вставить синхронизацию, и вообще как правильнее организовать код?

PHP код:
{=============================================}
///////////////////////////////////////////////
///////////////Запускаем поток/////////////////
///////////////////////////////////////////////
{=============================================}
procedure TNewThread.Execute;
begin
  vBulletinGrab
();
end;

{=============================================}
///////////////////////////////////////////////
/////////Процедура граббинга с vBulletin////////
///////////////////////////////////////////////
{=============================================}

procedure vBulletinGrab;
var
  
NickGrabRegExLastPageGrabRegExTRegEx;
  
LastPageNumberTmatch;
  
NicksTMatchCollection;
  
Pagewidestring;
  
ijCurrentPageNumberlongint;
  
HTMLDecTHTMLDecode;
begin
  
///Если авторизация не используется то создаём объект TidHttp///
  
if MainForm.AuthButton.Caption 'Вход' then
    Http 
:= TidHttp.Create(nil);

  
///Создаём объект для преобразования символов///
  
HTMLDec := THTMLDecode.Create;

  
///Парсим общее количество страниц///
  ///Скачиваем страницу Page
  
Page := Http.Get(MainForm.AdresEdit.Text 'memberlist.php');
  
///Если на станице есть совпадения с регуляркой
  
if LastPageGrabRegEx.IsMatch(Page,'<td class=([''""]?)vbmenu_control\1 (.+?)>(<.*>)?([Страница|\w]*\s)([\d]*\s)([из|\w]+\s)(\d*)?(<.*>)?(<.*>)',[roIgnoreCaseroMultiLine]) then
    
///то заисываем одно совпадение
    
LastPageNumber := LastPageGrabRegEx.Match(Page,'<td class=([''""]?)vbmenu_control\1 (.+?)>(<.*>)?([Страница|\w]*\s)([\d]*\s)([из|\w]+\s)(\d*)?(<.*>)?(<.*>)',[roIgnoreCaseroMultiLine])
  else
    
///иначе выврдим сообщение об ошибке///
    
ShowMessage('Не удалось получить количество страниц');

  
///Выводим максимальное количество страниц в статистику и прогрессбар///
  
MainForm.Label5.Caption := (LastPageNumber.Groups.Item[7].Value);
  
MainForm.ProgressBar1.Max := strtoint(LastPageNumber.Groups.Item[7].Value);

  
///Инициализируем переменные///
  
CurrentPageNumber := 0;
  
:= 1;
  
:= 0;

  
///В цикле граббим ники///
  
for := 1 to strtoint(LastPageNumber.Groups.Item[7].Value) do
  
begin
    Page 
:= '';
    
CurrentPageNumber := i;

    
///Скачиваем страницу Page
    
Page := Http.Get(MainForm.AdresEdit.Text 'memberlist.php?do=getall&order&page=' inttostr(i));
    
///Если на станице есть совпадения с регуляркой
    
if NickGrabRegEx.IsMatch(Page,'<a href="member.php\?([u|s])(.*?)">(<.*>)?(.+?)(</.*>)?(</.*>)',[roIgnoreCaseroMultiLine]) then
      
///то заисываем все совпадения
      
Nicks := NickGrabRegEx.Matches(Page,'<a href="member.php\?([u|s])(.*?)">(<.*>)?(.+?)(</.*>)?(</.*>)',[roIgnoreCaseroMultiLine])
    else
      
///иначе выврдим сообщение об ошибке///
      
ShowMessage('Не удалось получить страницу №' inttostr(i));

    
///Записываем найденные ники в NicksMemo///
    
for := 0 to Nicks.Count do
      
MainForm.NicksMemo.Lines.Add(HTMLDec.Convert(Nicks[j].Groups.Item[4].Value));

    
///Записываем дааные в статистику///
    
MainForm.Label7.Caption := inttostr(CurrentPageNumber);
    
MainForm.Label9.Caption := inttostr(strtoint(LastPageNumber.Groups.Item[7].Value) - CurrentPageNumber);
    
MainForm.Label11.Caption := inttostr(MainForm.NicksMemo.Lines.Count);
    
MainForm.ProgressBar1.Position := CurrentPageNumber;

    
///Ждём перед загрузкой следующей страницы///
    //sleep(100);
  
end;
  
HTMLDec.Free;

  
///Активируем кнопки и поля после завершения граббинга///
  
MainForm.StartButton.Caption := 'Старт';
  
MainForm.StartButton.Enabled := true;
  
MainForm.StopButton.Enabled := false;
  
MainForm.ComboBox1.Enabled := true;
  
MainForm.AuthCheckBox.Enabled := true;
  
MainForm.AdresEdit.Enabled := true;
  
MainForm.LoginEdit.Enabled := true;
  
MainForm.PasswordEdit.Enabled := true;
end
just4smth вне форума Ответить с цитированием
Старый 02.07.2012, 10:02   #2
QunneD
C++ &amp;amp; PHP &amp;amp; Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

Если исходники предоставляете, то предоставляйте полностью, а то лично мне не особо понятно чо да как и в чем проблема?

А так, если дело дошло до потоков, то можно использовать WinAPI CreateThread, вроде проще и коварнее.
QunneD вне форума Ответить с цитированием
Старый 02.07.2012, 10:13   #3
just4smth
_____________
Пользователь
 
Регистрация: 14.05.2011
Сообщений: 30
По умолчанию

Цитата:
Если исходники предоставляете, то предоставляйте полностью, а то лично мне не особо понятно чо да как и в чем проблема?
Много букав получится

Цитата:
А так, если дело дошло до потоков, то можно использовать WinAPI CreateThread, вроде проще и коварнее.
Раздел - Помощь студентам.
Не все студенты знают апи.

Например запись результатов граббинга в мемо выполняется во втором потоке (без синхронизации):
PHP код:
///Записываем найденные ники в NicksMemo/// 
    
for := 0 to Nicks.Count do 
      
MainForm.NicksMemo.Lines.Add(HTMLDec.Convert(Nicks[j].Groups.Item[4].Value)); 

Последний раз редактировалось just4smth; 02.07.2012 в 10:28. Причина: [PHP][/PHP]
just4smth вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
исправить код seed92 Помощь студентам 0 21.02.2011 16:02
при закрытии потока(Tthread) посылать на форму код ответа или сообщение Человек_Борща Общие вопросы Delphi 2 14.12.2010 21:19
Помогите исправить код в Delphi Saka Помощь студентам 9 21.12.2009 02:21
Исправить код IndividBezLica Помощь студентам 0 02.06.2009 09:41
Помогите исправить код (Delphi)! Cesmir Помощь студентам 18 30.12.2008 03:03