Pregunta

Im nuevo a la red de programación y en particular a asincrónicos-procesos. También iniciar nueva con el impulso-lib

Im implementación de una clase, para acceder a un servidor IMAP. Puedo enviar y recibir la comandos y la respuesta, en general

La respuesta se pone en cola en un dequeue dentro de la clase. Puse simples las líneas de respuesta en la cola, para su posterior procesamiento.

¿Cuál es ahora la mejor manera de procesar la respuesta en cola?

  1. Un hilo adicional para comprobar (tiempo basada en) la cola, para las nuevas entradas?
  2. Cada vez que un nuevo entradas es empujado a la cola de hacer un poco de devolución de llamada?
    ¿Cómo se puede implementar E e integrar esta devolución de llamada?

Tal vez alguien tiene un pequeño ejemplo para esto.

Gracias

¿Fue útil?

Solución

  

Cada vez que un nuevo entradas es empujado a la cola de hacer un poco de devolución de llamada?   ¿Cómo se puede implementar E e integrar esta devolución de llamada?

Asumo que está trabajando con conexión síncrona solo hilo.

hacer algo así:

class worker {

    deque<message> messages;
    bool is_writing_;

    push_message(message msg) {
        messages.push_back(msg);
        notify();
    }

    void notify()
    {
        if(!is_writing_) {
            is_writing_=true;
            init();
        }
    } 

    void init()
    {
        if(messages.empty()) { is_writing_=false; return; }
        messamge msg=messages.pop();
        convert_to_vector(v);
        async_write(socket,buffer(v),
            boost::bind(&worker::complete,this,placehoders::error));
    }
    void complete(error_code const &e)
    {
        if(!e) {
            init();
        }
        else { cleanup(); }
    }

};

Nota !!!

Esta es la implementación solo hilo. Si desea notificar a otro hilo del que debiera No llame some_worker->push_message(msg), se debe utilizar iosrvice:

service.post(boost::bind(&worker::push_message,some_worker,msg));

Y push_message será llamado desde el mismo hilo que corre ioservice.

Otros consejos

Una posible forma de implementar el procesador de colas es el uso de un semáforo de señalización.

Por ejemplo la pthread tipo de condición ( Descripción ) si usted está en una plataforma compatible con POSIX.

Usted podría tener un número N de "hilos de procesamiento de la cola de espera" en el fondo.

  1. Cada vez que algo se metió en la cola de su semáforo envía su señal.

    • La señal es recibida por dormir hilos "de procesamiento de cola", que se inician el procesamiento de la cola, ya que saben que tienen datos.

    • Cuando el hilo termina de procesar sus datos quedarán, verifique el tamaño de cola para ver si se debe tomar alguna otra cosa, si no, entonces volver a la espera de una señal.

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