|
#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 jmp $ ; Happy End! The Cake Is A Lie. |
#4
|
|||
|
|||
Но это всё равно не уберёт зависание формы
|
#5
|
||||
|
||||
Чего-то не понимаю. Sleep вызывается в потоке. В таком случае должен спать только поток. Я уже сто раз так делал - и все нормально.
Скинь сюда пожалуйста весь код, связанный с потоком. jmp $ ; Happy End! The Cake Is A Lie. |
#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
|
||||
|
||||
хм.. а создаешь как и запускешь?
jmp $ ; Happy End! The Cake Is A Lie. |
#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; APPLICATION.TERMINATOR |
#10
|
|||
|
|||
будет ругаться на это
Код:
Application.ProcessMessages; |