2011-09-12 15 views
5

Actualmente estoy jugando con la Biblioteca de agentes asíncronos en el Concurrency Runtime de Microsoft. Todavía no he encontrado una forma obvia de indicar que una tarea ha finalizado mediante el uso de mensajes de ventana, o algún otro medio para notificar al hilo de la interfaz de usuario que el trabajo ha finalizado.Agentes asíncronos y mensajes de ventana

Sé que puedo pasar identificadores de ventana y valores de mensaje (WM_xxx) junto con las tareas, y hacer que la tarea use PostMessage() para señalar el subproceso de IU. Esto es algo feo en mi opinión, y una fuente de error. Si ocurre una excepción, tengo que tener un controlador catch que señale mi subproceso de interfaz de usuario. Esto se olvida fácilmente y es posible que la condición de excepción no se ejecute con mucha frecuencia, por lo que es difícil detectarla.

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

Es curioso que esto no esté incorporado en la biblioteca, ya que no es una biblioteca multiplataforma. Está diseñado para ejecutarse en Windows y solo en Windows, según tengo entendido.

¿Está la funcionalidad disponible en la biblioteca, o tengo que pasarla manualmente?

Respuesta

1

Puede crear un subproceso de monitor con la función exclusiva de supervisar un unbounded_buffer para un mensaje de Windows y enviar ese mensaje de forma adecuada. Haga saber a sus agentes sobre este buffer.

Cuestiones relacionadas