![]() |
|
|
#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. |
|
#7
|
||||
|
||||
|
хм.. а создаешь как и запускешь?
|
|
#8
|
|||
|
|||
|
в кнопке
Код:
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
|
|||
|
|||
|
А если так:
Код:
procedure doWait(MilliSec: Cardinal); var CC: Cardinal; begin CC:= GetTickCount; while GetTickCount < (CC + MilliSec) do Application.ProcessMessages; end; |
|
#10
|
|||
|
|||
|
будет ругаться на это
Код:
Application.ProcessMessages; |