2011-06-11 19 views
5

Boost no proporciona modelo orientado a eventos de un solo hilo, de tal manera que fue difundida en Unix antes pthreads - Mainloop + "devoluciones de llamada", ¿verdad?impulso y un único subproceso de eventos basado en modelos

Por ejemplo, si quiero usar boost :: message_queue en una aplicación de subproceso único y mezclarlo con temporizadores y otros eventos asincrónicos (mainloop), entonces boost no lo admite, ¿verdad?

Respuesta

10

me vería en

  1. Boost::Signals (se puede utilizar con precisión como desee)
  2. Boost::Asio (lo más importante: strands). Hebras le permitirá tener su pastel y comérselo también (por tener la semántica de un solo subproceso al tiempo que permite el trabajo en paralelo, en otra 'apartamento solo hilo' si permite que mi juego de palabras COM-infectada). Esto es directamente en el dinero con respecto a su pregunta, ya que se sincronizará automáticamente y pondrá en cola el trabajo para ir al hilo 'principal' como lo llama.

Si va a combinar los dos, asegúrese de usar Boost Signals2 (porque admite el enhebrado).

+0

+1 para señales (lo escribió antes de que pudiera hacerlo;) –

6

boost::interprocess::message_queue está diseñado para multiprocesamiento. En un proceso de un solo subproceso, siempre puede usar un std::queue.

+0

No sé por qué se tiene en cuenta multiprocesamiento contradictorio a un único subproceso. El "multiprocesamiento" controlado por eventos en el proceso de un solo hilo existe en todas las plataformas. En Unix, para aplicaciones de red, era el modelo predominante, y muchas aplicaciones de red todavía lo usan. Para escalar en sistemas multi-core, este modelo usa múltiples procesos de un solo subproceso. – Andrei

+1

Conozco el modelo de multiprocesamiento, no hay necesidad de evangelizar. Parecía estar preguntando acerca de la coordinación dentro de un bucle de evento único, que no requiere IPC. – Tobu

Cuestiones relacionadas