![]() |
|
|
|
|
#1
|
|||
|
|||
|
Решил sleep заменить на timer, что бы форма при попадание на время задержки не висла, но всё равно тот же результат
Код:
FHttp.get(('Сайт');
{ Timer := TTimer.Create(self);
Timer.Enabled := true;
Timer.OnTimer := OnTimer;
Timer1.Interval := h;
при обоих случаях из потока форма зависает
Sleep(h);}
FHttp.get('Сайт2');Как правельней сделать что бы форма не висла? Последний раз редактировалось bulldog, 08.12.2010 в 22:43. |
|
#2
|
|||
|
|||
|
попробывал так
Код:
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
|
||||
|
||||
|
можно так:
Код:
//вместо while not Terminated do //сделать while true do |
|
#4
|
|||
|
|||
|
Но это всё равно не уберёт зависание формы
|
|
#5
|
||||
|
||||
|
Чего-то не понимаю. Sleep вызывается в потоке. В таком случае должен спать только поток. Я уже сто раз так делал - и все нормально.
Скинь сюда пожалуйста весь код, связанный с потоком. |
|
#6
|
|||
|
|||
|
Код:
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. |