delphi udp indy

delphi - ¿Cómo puedo usar TIdudpserver en una aplicación de consola?



indy (1)

Si usa el enhebrado, entonces no necesita mensajes ni formularios de Windows. Simplemente configure ThreadedEvent en true y maneje en un hilo, recordando que el evento está llegando a un hilo diferente, por lo que tendrá que manejar la "sincronización" del hilo. Lo hago utilizando solo subprocesos que procesan mensajes de su propia cola interna (mis mensajes y mi cola, no mensajes o colas de Windows), por lo que el controlador de eventos coloca un mensaje con los datos recibidos en la cola del subproceso, para ser procesado en el contexto del hilo "destino", no el hilo oyente Indy.

El componente del servidor Indy UDP parece depender de los mensajes de Windows, ya que veo que los nuevos mensajes aparecen solo cuando el cursor del mouse se mueve sobre el formulario que contiene el componente del servidor.

Creé el componente en tiempo de ejecución usando este código:

private { Private declarations } Srv: TIdUDPServer; ... procedure TForm1.FormCreate(Sender: TObject); begin Srv := TIdUDPServer.Create(Self); Srv.DefaultPort := 9009; Srv.OnUDPRead := Self.udpServerUDPRead; Srv.Active := True; end;

Preferiría una consola o aplicación de servicio. ¿Necesito un identificador de ventana (invisible) + algún código de cola de mensajes de Windows para que este componente funcione?

Actualización: cierta documentación (inoficial) dice:

TIdUDPServer cuando está activo crea un hilo de escucha para escuchar los paquetes UDP entrantes. ... Cuando ThreadedEvent es falso, el evento OnUDPRead se disparará en el contexto de la cadena principal del programa. Cuando ThreadedEvent es verdadero, el evento OnUDPRead se activa en el contexto de la cadena de escucha.