ClientSocket - Requisição
15/03/2006
0
Query1.Open;
Query1.First;
While not Query1.Eof Do
Begin
i := 0;
ClientSocket.Host := Query1nmMaq.AsString;
ClientSocket.Active := True;
while not ClientSocket.Socket.Connected Do
Begin
Application.ProcessMessages;
i := i + 1;
if i > 50 Then Break;
End; //While
if ClientSocket.Active = True Then
Begin
ClientSocket.Socket.SendText(´RequestLetreiro´);
Sleep(1000);
End; //ClientSocket
Query1.Next;
ClientSocket.Active := False;
End;
e com a seguinte duvida...
Eu preciso mandar essa requisição para todos os usuarios logados a partir desta quer.
Só que o que acontece, de vez em quando fica o usuario logado mesmo ele nao estando, por exemplo , a maquina desligou sozinha.
Mas dento deste loop esle acaba passando muito rapido pelo active do componente socket e ele nao ativa a conexão. Fazendo com que nao envie a solicitação.
Gostaria de alguma dica de como evitar isto
Alguem poderia me dar uma ajudinha?!
no código acima impus um limite de tempo, mas nao esta funcionando corretamente.
Queria algo do tipo:
ele tenta a conexão com a maquina até um determinado instante, se nao conseguir, vai pra proxima maquina.
Obrigado e Aguardo Respostas.
Tremonti
Posts
16/03/2006
Ipc$
var tmp:DWord; tmp := GetTickCount; ClientSocket.Active := True; while not ClientSocket.Active and ((GetTickCount - tmp) < 5000) do begin Application.ProcessMessages; Sleep(1); end;
Uma dúvida: pq vc faz Query1.First; após Query1.Open; ?
16/03/2006
Tremonti
em relação ao first... é porque ganho por linha...rs
16/03/2006
Ipc$
16/03/2006
Ipc$
No meu caso, nunca passo o Host no TClientSocket e sim o Address.
22/03/2006
Tremonti
Query1.Open;
While not Query1.Eof Do
Begin
tmp := 0;
ClientSocket.Host := Query1nmMaq.AsString;
ClientSocket.Active := True;
while ((ClientSocket.Active = False) And (tmp < 5)) do
Begin
try
Application.ProcessMessages;
except
Break;
end; //Try
tmp := tmp + 1;
Sleep(100);
End;
if ClientSocket.Active = True Then
Begin
ClientSocket.Socket.SendText(´RequestLetreiro´);
Sleep(100);
End //ClientSocket
else
Begin
Query1.Delete;
Query1.ApplyUpdates;
End;
ClientSocket.Active := False;
Query1.Next;
End;
Clique aqui para fazer login e interagir na Comunidade :)