TThread e Sleep
Olá colegas!
Por exemplo, neste código:
Existiria outro comando sem ser Sleep e sem ´travar´ as outras threads ?
Obs: Application.ProcessMessages deixa a cpu em 100¬ de uso.
Por exemplo, neste código:
procedure TMyThread.Execute; begin While not Terminated and Socket.Connected do begin if Socket.ReceiveLength > 0 then ProcesseComando; Sleep(1); end; end;
Existiria outro comando sem ser Sleep e sem ´travar´ as outras threads ?
Obs: Application.ProcessMessages deixa a cpu em 100¬ de uso.
Persist
Curtidas 0
Respostas
Beppe
21/07/2004
Vc quer travar apenas esta [b:449824060a]uma[/b:449824060a] thread? Então é Sleep mesmo. Desta forma, o desempenho da CPU não é prejudicado. Vc pode usar um laço vazio para gastar um pouco de tempo, mas assim consome processamento. Qual o problema com Sleep?
GOSTEI 0
Persist
21/07/2004
Todas as threads executam esse mesmo método.
Não há problema nenhum em utilizar Sleep, é que fica sempre em loop contínuo do While.
Pensei no Application.HandleMessage, mas mesmo vindo a informação pelo Socket p/ processar o comando, ele fica travado.
Não há problema nenhum em utilizar Sleep, é que fica sempre em loop contínuo do While.
Pensei no Application.HandleMessage, mas mesmo vindo a informação pelo Socket p/ processar o comando, ele fica travado.
GOSTEI 0
Beppe
21/07/2004
Quando vc chama Sleep, apenas a thread corrente adormece, as outras, mesmo sendo da mesma classe, não, só quando elas chamarem Sleep. O que está tentando fazer?
GOSTEI 0
Persist
21/07/2004
É um servidor que processa n clientes conectados por Sockets.
Daí quando o cliente solicita alguma coisa, o servidor processa e envia o resultado. Então abro uma thread no servidor quando o cliente se conecta, mas não queria que ficasse sempre em looping e sim que ela ficasse latente, ou seja, quando vem a informação, a thread executa.
Antigamente abria e fechava as threads só quando viesse a informação, mas dava muitos erros de violação, então a thread fica sempre no ar.
Muitas vezes o cliente está conectado, sem fazer nada e a thread no servidor fica lá em looping de bobeira.
Daí quando o cliente solicita alguma coisa, o servidor processa e envia o resultado. Então abro uma thread no servidor quando o cliente se conecta, mas não queria que ficasse sempre em looping e sim que ela ficasse latente, ou seja, quando vem a informação, a thread executa.
Antigamente abria e fechava as threads só quando viesse a informação, mas dava muitos erros de violação, então a thread fica sempre no ar.
Muitas vezes o cliente está conectado, sem fazer nada e a thread no servidor fica lá em looping de bobeira.
GOSTEI 0
Beppe
21/07/2004
Entendi...mas o problema então é o loop em si, não a chamada a Sleep. O que vc pode fazer, é usar eventos do socket, eu não mexo com isso mas tenho quase certeza que eles existem, assim vc só processa quando recebe.
GOSTEI 0
Persist
21/07/2004
Bom, isso seria em dar Suspend e Resume.
Pensei que poderia existir algo como o HandleMessage que pára naquela instrução até que chegue alguma mensagem e daí prosseguir o loop.
Pensei que poderia existir algo como o HandleMessage que pára naquela instrução até que chegue alguma mensagem e daí prosseguir o loop.
GOSTEI 0