Pregunta

Yo uso el componente TIdCmdTCPServer de Indy 10 para realizar mi aplicación cliente-servidor. El problema es que la petición de los clientes puede ser bastante complicado y que la parte de interfaz gráfica de usuario de mi aplicación de servidor inmediatamente pierde la capacidad de respuesta. Desde el Indy Documentación , tengo que Indy:

  

crea e inicia hilos de escucha para los enlaces utilizando el tpHighest prioridad hilo.

¿Puedo cambiar ese comportamiento?

¿Fue útil?

Solución

Como Rob señaló, no cambian la prioridad de la hebra de escucha, bajar la prioridad de los subprocesos de trabajo en su lugar. Se puede acceder en el controlador OnConnect () del TIdCmdTCPServer ejemplo, así:

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

Otros consejos

Configuración de la prioridad más baja para el hilo de escucha no va a resolver su problema. Toda la hebra de escucha está haciendo es escuchar, que no es una tarea intensivo de la CPU. Hasta que llegue una conexión, ese hilo no está haciendo nada en absoluto. Es posible que pueda confirmar que con una herramienta como el explorador de procesos; Creo que puede mostrar el uso de CPU por hilo.

Configuración de la prioridad más baja en realidad puede hacer que aparezca tu servidor menor sensible porque cuando llega una conexión, el subproceso de escucha para esa conexión se ejecuta con una prioridad más baja y no ser capaz de trabajar en la conexión inmediatamente. El cliente tendrá que esperar un poco más antes de su servidor empieza a procesar su solicitud.

Las solicitudes no se manejan en el hilo del oyente. Los delegados hebra de escucha mayor parte del trabajo a otros hilos. Si usted tiene sólo una unión TCP, entonces usted tiene sólo una hebra de escucha, pero se puede procesar muchas conexiones simultáneas. Cada conexión será manejado por un hilo separado a pesar de ser sólo un oyente.

De todos modos, se puede cambiar la prioridad de manejo de eventos OnBeforeListenerRun del objeto de servidor. Se recibe una referencia a la TIdThread que representa la hebra de escucha, por lo que se puede asignar un valor diferente a su propiedad Priority. Además, usted tiene el código fuente, por lo que podría entrar y cambiar la definición de la constante tpListener en IdGlobalCore.pas . El código utiliza ese valor, no tpHighest directamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top