Fórum OnConnect, OnDisconnect, OnRead do TClientSocket com Thread #291551
11/08/2005
0
No de envio uso os eventos OnConnect, OnDisconnect, OnRead sem problemas. Estou pretendendo usar Thread para ficar recebendo enquanto envio pelo primeiro.
Só que não estou conseguindo fazer funcionar os eventos acima para o TClientSocket de recebimento. Não ocontece nada quando faço Open no TClientSocket dentro da Thread.
A Thread finaliza antes, ela não executa nenhum dos eventos.
O que fazer?
Muito obrigado,
Alessandro.
Alesabino
Curtir tópico
+ 0Posts
11/08/2005
Massuda
Gostei + 0
12/08/2005
Dnolive
No de envio uso os eventos OnConnect, OnDisconnect, OnRead sem problemas. Estou pretendendo usar Thread para ficar recebendo enquanto envio pelo primeiro.
Só que não estou conseguindo fazer funcionar os eventos acima para o TClientSocket de recebimento. Não ocontece nada quando faço Open no TClientSocket dentro da Thread.
A Thread finaliza antes, ela não executa nenhum dos eventos.
O que fazer?
Muito obrigado,
Alessandro.
--------------------
Estou criando um projeto com estes componentes, se quizer podemos trocar umas figurinhas.
T+
Gostei + 0
12/08/2005
Kapak
Gostei + 0
12/08/2005
Alesabino
Como assim?
Vou me explicar melhor Massuda.
Tem um servidor que eu me conecto através do TClientSocket de envio, passo aos parãmetros de login e transmito a minha mensagem.
Como são várias mensagens para enviar, preciso ter um outro TClientSocket de recebimento só para ficar recebendo enquanto continuo mandando pelo de envio. Entendeu?
O que eu fiz foram dois programas que um fica enviando e o outro fica recebendo.
Gostaria de fazer isso em uma Thread dentro de um só programa. Como tenho que usar os eventos Onconnect,..., OnRead não sei como fazer em uma Thread.
Alguém sabe me dizer como?
Gostei + 0
12/08/2005
Massuda
Se optar por usar uma thread separada, parece que você tem que usar o TClientSocket em modo ctBlocking (toda operação de escrita/leitura só retorna após ser executada, sem gerar eventos). Tem [url=http://bdn.borland.com/article/0,1410,26693,00.html]este exemplo[/url] no site da Borland (para ler o artigo pode ser necessário fazer login ou registrar-se gratuitamente no site).
Gostei + 0
12/08/2005
Kapak
Gostei + 0
15/08/2005
Alesabino
Se optar por usar uma thread separada, parece que você tem que usar o TClientSocket em modo ctBlocking (toda operação de escrita/leitura só retorna após ser executada, sem gerar eventos). Tem [url=http://bdn.borland.com/article/0,1410,26693,00.html]este exemplo[/url] no site da Borland (para ler o artigo pode ser necessário fazer login ou registrar-se gratuitamente no site).[/quote:56af3ed29d]
Vou pesquisar o link e dou retorno, obrigado.
Obrigado.
Gostei + 0
15/08/2005
Alesabino
Não acho que seja isso.
Vou pesquisar a dica do Massuda e retorno com uma resposta.
Obrigado.
Gostei + 0
15/08/2005
Kapak
procedure TClientThread.Execute; begin While not Terminated and Socket.Connected do begin if Socket.ReceiveLength > 0 then begin // Aqui vc processa a informação sem utilizar o evento onRead end; Sleep(1); end;
Gostei + 0
15/08/2005
Massuda
Na prática, tenho a impressão que seu código equivale (embora seja mais simples) a usar o modo ctBlocking... tem um loop ´inifinito´ esperando os dados chegarem. O Sleep é para evitar 100¬ de uso da CPU?
Gostei + 0
15/08/2005
Kapak
Gostei + 0
15/08/2005
Massuda
Gostei + 0