Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.12.2010, 17:09
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию Таймер в потоке

Решил sleep заменить на timer, что бы форма при попадание на время задержки не висла, но всё равно тот же результат
Код:
FHttp.get(('Сайт');
      {  Timer := TTimer.Create(self);
        Timer.Enabled := true;
        Timer.OnTimer := OnTimer;
        Timer1.Interval := h;
при обоих случаях из потока форма зависает
    Sleep(h);}
      FHttp.get('Сайт2');
h это время в милисекундах полученное при парсенге.
Как правельней сделать что бы форма не висла?

Последний раз редактировалось bulldog, 08.12.2010 в 22:43.
Ответить с цитированием
  #2  
Старый 08.12.2010, 22:42
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию

попробывал так
Код:
FHttp.get('сайт');
      begin
 while not Terminated do for I := 1 to h do//подвисает здесь
  begin
   Sleep(1000);
   Synchronize(DoAnything);
FHttp.get('сайт'+ g1);

procedure BOT.DoAnything;
begin
Form1.Caption := IntToStr(i);
end;
Ответить с цитированием
  #3  
Старый 08.12.2010, 22:57
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

можно так:
Код:
//вместо
while not Terminated do
//сделать
while true do
потому что если Terminated, то твой поток уже вырубится.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #4  
Старый 08.12.2010, 23:26
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию

Но это всё равно не уберёт зависание формы
Ответить с цитированием
  #5  
Старый 08.12.2010, 23:30
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Чего-то не понимаю. Sleep вызывается в потоке. В таком случае должен спать только поток. Я уже сто раз так делал - и все нормально.
Скинь сюда пожалуйста весь код, связанный с потоком.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #6  
Старый 08.12.2010, 23:39
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию

Код:
function SetTimeOutJS(Str: String): Integer;//ищет время на странице
var
  I: Integer;
  S: String;
begin
  S := '")'',';
  I := Pos(S, Str);
  if I > 0 then
  begin
    S := Copy(Str, I + Length(S), Length(Str));
    I := Pos(')', S);
    if I > 0 then
    begin
      S := Trim(Copy(S, 1, I - 1));
      I := StrToIntDef(S, -1);
      if I > 0 then
        Result := I
      else
        Result := 0;
    end;
  end;
end;


procedure BOT.Execute;
var
  N: String;
  h: Integer;
  D: Integer;
  Otvet: String;
  Otvet1: String;
  g1: String;
begin
      Otvet := HTTP_BOT.get('http://' + Сайт + N);
      Ur := парсит(Otvet);
      Otvet1 := HTTP_BOT.get('http://' + Сайт + Ur);
      h := SetTimeOutJS(Otvet1);
///
      HTTP_BOT.get('Сайт');
      Sleep(h);// h может быть от 10 секунд до ... 
      HTTP_BOT.get('http://' + Сайт + g1);
end;

Последний раз редактировалось bulldog, 08.12.2010 в 23:45.
Ответить с цитированием
  #7  
Старый 09.12.2010, 00:00
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

хм.. а создаешь как и запускешь?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #8  
Старый 09.12.2010, 00:11
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию

в кнопке
Код:
Pay:=BOT.Create(True);
Pay.FreeOnTerminate := True;
Pay.Priority:=tpLOWEst;
Pay.Resume;
в потоке
Код:
type
  BUX = class(TThread)
    FUrl: String;
  private
    HTTP_BOT: TIdHTTP;
    h: Integer;
  protected
    constructor Create(CreateSuspended: Boolean; aUrl: String);
    procedure Execute; override;
    destructor Destroy; override;
    public
  end;

constructor BUX.Create(CreateSuspended: Boolean; aUrl, aLog, aPass: String);
begin
  inherited Create(CreateSuspended);
  FreeOnTerminate := True;
  Priority := tpLower;
  FUrl := aUrl;
  end;

procedure BOT.Execute;
var 
N: String;
  D: Integer;
  Otvet: String;
  Otvet1: String;
  g1: String;
KAKA: Integer;
begin
HTTP_BUX := TIdHTTP.Create(nil);
begin
      Otvet := HTTP_BOT.get('http://' + Сайт + N);
      Ur := парсит(Otvet);
      Otvet1 := HTTP_BOT.get('http://' + Сайт + Ur);
      h := SetTimeOutJS(Otvet1);
///
      HTTP_BOT.get('Сайт');
      Sleep(h);// h может быть от 10 секунд до ... 
      HTTP_BOT.get('http://' + Сайт + g1);
end;
end;
Ответить с цитированием
  #9  
Старый 09.12.2010, 19:34
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

А если так:
Код:
procedure doWait(MilliSec: Cardinal);
  var CC: Cardinal;
 begin
  CC:= GetTickCount;
  while GetTickCount < (CC + MilliSec) do
  Application.ProcessMessages;
 end;
__________________
APPLICATION.TERMINATOR
Ответить с цитированием
  #10  
Старый 09.12.2010, 22:58
bulldog bulldog вне форума
Начинающий
 
Регистрация: 10.05.2010
Сообщения: 160
Репутация: 14
По умолчанию

будет ругаться на это
Код:
Application.ProcessMessages;
т.к. код в потоке используется
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter