4D Summit 2016: Laurent Esnault presenta a los trabajadores y la IU en modo preventivo

Traducido automáticamente de Deepl

Nuestro propio vicepresidente de ingeniería, Laurent Esnault, explica el intercambio de información entre múltiples procesos Y entre procesos y formularios durante su Break Out Session: Preemptive Multi-threading en el 4D Summit 2016. Gracias al preemptive multi-threading, usted puede tener más procesos paralelos, y así añadir más y más usuarios, ya sea para aplicaciones de escritorio o web.

Si se perdió la sesión de Laurent en el 4D Summit 2016, vea este vídeo de 15 minutos y disfrute de un entrenamiento personal del maestro del preemptive multi-threading.

Requisitos previos

Para aprovechar el multihilo preventivo, necesitará utilizar

¡Pero no tengas miedo! Tenemos algunas soluciones potentes y fáciles que presentaremos en detalle con ejemplos ilustrativos.

Cómo compartir información entre procesos

Si no tienes variables interproceso en modo preventivo, ¿cómo compartes información entre procesos? Por eso introducimos un nuevo concepto: «trabajadores». Pero, ¿qué es exactamente un trabajador?

Me alegro de que hayas preguntado. Es un cuadro de mensajes asociado a un proceso específicamente dedicado a ejecutar sus mensajes. Usando el CALL WORKER puedes enviar un mensaje de un proceso a otro (para enviarle información, o pedirle que haga algo). La sintaxis de este comando es bastante similar a la del comando New process por ejemplo, puedes pasar cualquier parámetro y/o método de proyecto.

Utilicemos una pequeña animación para entender mejor cómo funciona:

En este ejemplo, queremos pasar información del proceso de aplicación al proceso myWorker. El proceso de aplicación se está ejecutando y el proceso myWorker está en pausa.

  • En el proceso de aplicación, el comando CALL WORKER es llamado para pasar algunos parámetros a myWorker , y queremos que myWorker ejecute el método del proyecto myMethod.
  • Crea un mensaje que se publica de forma asíncrona en un buzón de mensajes dedicado al proceso myWorker. La bandera está levantada, por lo que el trabajador se despierta automáticamente y recoge el mensaje, recupera el contenido (los parámetros) y ejecuta miMétodo.
  • Cuando el proceso myWorker ha terminado de ejecutar myMethod, no muere. Sólo está en pausa, esperando que se ejecute otro mensaje. Esta es la principal diferencia con el New process que crea un proceso, ejecuta un método con algunos parámetros y luego muere.

¿Cuándo muere un trabajador? Básicamente, morirá cuando cierres la aplicación o si llamas al KILL WORKER comando. No mata abruptamente el proceso, sólo envía un mensaje al worker pidiéndole que se suicide.

Demostración: Trabajadores

Echa un vistazo a la base de datos de ejemplo utilizada para la demostración con las explicaciones correspondientes en el post de Vanessa sobre los trabajadores.

Cómo acceder a la Interfaz de usuario desde procesos preemptivos

Anteriormente, dijimos que no se puede acceder a la interfaz de usuario desde un proceso preventivo. Obviamente, necesitábamos proporcionar una solución para eso. De ahí la introducción del comando CALL FORM de la interfaz de usuario. Este comando es similar al comando CALL WORKER comando. Esta vez, sin embargo, no es una caja de mensajes asociada a un proceso, es una caja de mensajes asociada a una ventana.

CALL FORM permite enviar un mensaje a una ventana para pedir al formulario que se ejecuta dentro de ella que ejecute un método con algunos parámetros.

Vamos a utilizar una pequeña animación de nuevo para demostrar el concepto:

blank

En este ejemplo, desde un proceso (que puede ser preemptivo) o un worker, queremos hacer algo en un formulario que se está ejecutando en el mismo proceso o en otro.

  • Llamamos al CALL FORM comando y pasamos el número de referencia de la ventana( es decir, el valor long int devuelto por el Open form window comando) en el parámetro de entrada, como el método del proyecto que queremos ejecutar(miMétodo) con algunos parámetros.
  • Se crea un mensaje que se publica de forma asíncrona en un cuadro de mensajes asociado a la ventana.
  • El proceso que maneja la ventana detecta automáticamente que tiene un mensaje. Recoge el mensaje y ejecuta el método myMethod y sus parámetros.
  • Luego, el proceso continúa manejando la ventana «como siempre» (manejando eventos como pulsar la tecla, bajar el ratón, etc.).

Como puedes ver, esto es bastante similar al ejemplo anterior sobre los trabajadores.

Demostración: mensajería entre formularios

Consulta la base de datos de ejemplo utilizada para la demostración con las explicaciones correspondientes en el post de Vanessa sobre la mensajería entre formularios .