• Domingo 22 de Diciembre de 2024, 13:44

Autor Tema:  Comunicacion con Puerto Serie  (Leído 1000 veces)

marodal

  • Nuevo Miembro
  • *
  • Mensajes: 22
    • Ver Perfil
Comunicacion con Puerto Serie
« en: Miércoles 7 de Abril de 2010, 12:33 »
0
Hola a todos!

Estoy realizando una aplicacion en cli/c++, con Visual C++ 2008.
Mi aplicacion debe comunicarse con un controlador a traves de comandos que envio por puerto serie. Tengo una serie de Forms, donde represento las entradas y salidas del controlador, las cuales tengo que activar/desactivar en funcion de lo que me devuelva el controlador tras el envio de los comandos.

Pues bien, mi problema es el siguiente: Cada Form debe mandar un comando mediante timer, en torno a cada decima de segundo, lo que me hace que puedo tener que mandar en torno a 30 comandos cada segundo. Para gestionar todo este trafico, me creado una cola de mensajes, esta cola es estatica, por lo que todos los forms pueden acceder a ella. Cada vez que mando un comando, el form que lo manda envia el comando a la cola. La cola es tratada por un hilo independiente, que va desencolando cada elemento de la cola y lo manda al puerto serie.

Hasta ahi todo funciona bien. Mi problema es lo que me devuelve el controlador. Segun envie un comando u otro, lo que me devuelve el controlador tendra un numero de bytes mayor o menor. ¿Como envia el hilo la respuesta al form que lo solicito?? Por ahi me han apuntado algo sobre delegados, pero la verdad que aunque me suenan, nunca he trabajado con ellos, y despues de mirar documentacion, sigo sin entender para que sirven. Por ultimo, otro problema que aun no esta resuelto es sincronizar la cola y evitar que mas de un form acceda a ella...esto lo puedo hacer habilitando una seccion critica sobre la cola, de manera que se libere cuando el form haya mandado el comando a la cola...

Bueno, muchas gracias por atenderme, y espero ansiosos vuestras respuestas/sugerencias!

Un saludo a todos,
Miguel Angel

Painkiller

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Comunicacion con Puerto Serie
« Respuesta #1 en: Viernes 9 de Abril de 2010, 00:38 »
0
Un delegado es basicamente un apuntador a una función, como un Form es una instancia de una clase, las funciones definidas dentro de ella (asi como los controles) no son accesibles a otros threads/instancias. Asi que en cuando creas un nuevo form, se puede pasar el delegado en el constructor, y asi puedes invocar el delegado de manera segura en otros thread/instancias. Pondría código pero la verdad que no manejo muy bien C++  :rolleyes: