2011-01-26 17 views
6

En primer lugar lo que hice (se proporcionará mínimo de la muestra si es que no me acaba de hacer algo estúpido):Compartir un impulso :: :: objeto asio io_service entre las bibliotecas cargadas dinámicamente

Tengo una aplicación GUI que refuerce varias interfaces de red para cambiar el contenido que se muestra en la GUI. Las interfaces de red se realizan como complementos que se cargan dinámicamente en el inicio de la GUI. La aplicación GUI proporciona un objeto boost :: asio :: io_service que pasa por referencia a las interfaces para que puedan usarlo para construir la E/S asíncrona. En el hilo de la GUI, este objeto io_service se consulta para sincronizar el acceso de las interfaces de red al contenido.

El problema ahora es que los manejadores no son llamados por el objeto io_service cuando sondean. Para reducir esto, implementé solo una interfaz y creé el objeto io_service allí, todavía llamando al sondeo desde el hilo de la GUI y eso funciona.

Mi pregunta ahora es: ¿es posible que exista un problema general al pasar el objeto io_service a las funciones DLL cargadas en tiempo de ejecución?

Si la situación no es clara, daré un ejemplo mínimo.

EDIT: Me siento realmente estúpido :) Simplemente hackeado un ejemplo mínimo y eso, por supuesto, funciona como un encanto. Eso significa que el origen del problema proviene de alguna otra parte del software.

¡Gracias a todos por su aporte!

Para hacer esta pregunta al menos un poco útil: Cualquier persona que quiera hacer algo similar (plugins para la red sincronizados a través de impulso :: :: asio io_service), se puede descargar el ejemplo here mínimo.

+1

El escenario es claro, pero un ejemplo sin duda ayudaría. –

+0

no hay nada malo con el uso del mismo io_service por cualquier número de DLL, y lo que es mucho más, puede ser utilizado por cualquier cantidad de subprocesos (si usted sabe lo que hace). así que proporcione una muestra del inicio de las operaciones asincrónicas y el sondeo –

+0

Sí, parece que cometí algún error en algún otro momento. Este escenario debería funcionar sin problemas. – LiMuBei

Respuesta

2

Revisaría varias opciones:
* Tal vez el objeto se copia en algún momento en lugar de ser pasado por referencia; puedes hacerlo aumentar :: no copiable para evitar que esto suceda.
* Compruebe el valor de retorno de la encuesta si es mayor que 0 se ejecutó algún controlador; si es 0, el problema es aumentar piense que no hay controlador.
* Agregue un controlador de prueba en su aplicación GUI para descartar la opción de que es un problema relacionado con DLL.

Depuración feliz!

+0

Dado que no hay un problema general con el escenario y solo necesito depurar mejor mi software, voy a marcar esto como la respuesta correcta. ¡Gracias! – LiMuBei

Cuestiones relacionadas