Pregunta

Actualmente estoy jugando con la Biblioteca de agentes asíncronos en Microsoft's Tiempo de ejecución de concurrencia. Todavía no he encontrado una forma obvia de señalar que una tarea se termina utilizando mensajes de ventana, o algún otro medio para notificar al hilo de la interfaz de usuario que el trabajo está terminado.

Sé que puedo pasar las manijas de las ventanas y los valores de los mensajes (WM_xxx) junto a las tareas y hacer el uso de la tarea PostMessage() para señalar el hilo de interfaz de usuario. Esto es algo feo en mi opinión y una fuente de error. Si se produce una excepción, tengo que tener un controlador de captura que indique mi hilo de interfaz de usuario. Esto se olvida fácilmente, y la condición de excepción puede no ejecutarse muy a menudo, por lo que es difícil detectarlo.

La documentación habla sobre cómo mover los datos al hilo de la interfaz de usuario. No utiliza mensajes de ventana, sino técnicas de votación. Me parece una tontería configurar temporizadores para encuestar si una tarea ha terminado, ¡cuando hay métodos de "interrupción" disponibles!

Es extraño que esto no esté integrado en la biblioteca, ya que no es una biblioteca de plataforma cruzada. Está diseñado para ejecutarse en Windows y Windows solo, por lo que entiendo.

¿Está la funcionalidad disponible en la biblioteca, o tengo que rodar esto?

¿Fue útil?

Solución

Puede crear un hilo de monitor con la única función de monitorear un Unlifounded_Buffer para un mensaje de Windows y enviar ese mensaje de manera apropiada. Haga que sus agentes sepan sobre este búfer.

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