2011-07-31 7 views
7

Me gustaría que alguien me diga los pros (y los contras) para usar la función de publicación. ¿Por qué y cuándo debería preferir usar la publicación y por qué/cuándo no debería usarla?boost :: asio :: io_service: ¿por qué usar la función de publicación?

+1

Esto podría interesarle "http://stackoverflow.com/questions/2326588/boost-asio-io-service-dispatch-vs-post" – Arunmu

+2

¡Gracias por la sugerencia! No estaba al tanto :-) – eve

+0

@ArunMu: He notado ese enlace antes, esperaba una respuesta expandida. – eve

Respuesta

8

La publicación es muy útil cuando desea que la devolución de llamada se realice esencialmente ahora, pero no en el contexto actual. Las razones pueden incluir:

  • El contexto actual mantiene bloqueos y desea llamar a la función una vez que se han liberado. Esto permitiría que la función adquiera esos bloqueos sin causar un punto muerto.

  • La pila de llamadas puede ser muy profunda

  • El hilo actual podría no ser apropiado para la función de alguna otra manera, y después es una manera conveniente de programar la función en otro hilo.

0

supongo que está comparando post()-dispatch(). En general, post() es más seguro, porque dispatch() puede llamar al controlador de inmediato, y existe un riesgo en la programación impulsada por eventos que afecta los eventos en cola de formas inesperadas. También hay razones para mantener la pila de llamadas pequeña, y para tener un comportamiento más predecible (dispatch()puede ejecutar ahora o puede ejecutarse más tarde).

Acabo de encontrar post() útil para eliminar un objeto solo después de que termina el evento io_service actual/controlador/operación.

Cuestiones relacionadas