Pergunta

Eu uso o componente TIdCmdTCPServer de Indy 10 a perceber minha aplicação cliente-servidor. O problema é que o pedido dos clientes pode ser bastante complicado e que a parte GUI do meu aplicativo de servidor perde imediatamente resposta. Do Indy Documentação , eu tenho que Indy:

cria e inicia ouvinte tópicos para ligações utilizando a prioridade segmento tpHighest.

Posso eu mudar esse comportamento?

Foi útil?

Solução

Como Rob apontou, não altere a prioridade do thread de escuta, baixar a prioridade dos segmentos de trabalho em seu lugar. Ele pode ser acessado no OnConnect () manipulador do TIdCmdTCPServer exemplo, assim:

procedure TServerForm.IdCmdTCPServer1Connect(AContext: TIdContext);
begin
  // sanity checks need to go here
  TIdYarnOfThread(AContext.Yarn).Thread.Priority := tpLower;
end;

Outras dicas

Como definir a prioridade mais baixa para o segmento de escuta não vai resolver o seu problema. Todo o thread de escuta está fazendo é ouvir, o que não é uma tarefa intensiva da CPU. Até que uma conexão chega, esse segmento não está fazendo nada em tudo. Você pode ser capaz de confirmar que com uma ferramenta como o Process Explorer; Eu acho que ele pode mostrar o uso da CPU por fio.

Como definir a prioridade mais baixa pode realmente fazer aparecer o servidor menos responsivo porque quando uma conexão chega, a escuta fio para essa conexão será executado com menor prioridade e não será capaz de trabalhar na conexão imediatamente. O cliente terá que esperar um pouco mais antes de seu servidor começa a processar o seu pedido.

Os pedidos não são tratados no segmento de ouvinte. Os delegados thread de escuta maior parte do trabalho para outros tópicos. Se você tem apenas a ligação de um TCP, então você vai ter apenas um thread de escuta, mas você pode processar muitas conexões simultâneas. Cada conexão serão tratadas por um segmento separado, apesar de haver apenas um ouvinte.

De qualquer forma, você pode alterar a prioridade de manipulação de eventos OnBeforeListenerRun do objeto servidor. Ele recebe uma referência para o TIdThread que representa o segmento ouvinte, para que você possa atribuir um valor diferente para sua propriedade Priority. Além disso, você tem o código-fonte, para que você possa entrar e alterar a definição da constante tpListener em IdGlobalCore.pas . Os usos de código que valor, não tpHighest diretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top