Aquí está mi problema: tengo que poder enviar y recibir a un dispositivo a través de una serie. Esto tiene que hacerse de una manera multihilo. El flujo es el siguiente:Productor/Consumidor para hablar con dispositivos en serie
Espere a que el dispositivo para enviarme algo - o si está inactivo, entonces consulta de estado para ver si en línea con el dispositivo
Si el dispositivo me envía algo, entonces mensaje de proceso, reconocer y decirle al dispositivo que realice otros comandos según sea necesario
Ahora mismo, tengo un hilo de recepción y un hilo de transmisión. El hilo de recepción tiene un ciclo while que sigue comprobando el puerto serie a través de ReadFile (...) para un byte. Si tengo un byte, entonces empiezo a construir mi buffer y luego analizo los datos para determinar qué se me envió.
El hilo de envío toma el siguiente comando definido por el hilo de lectura y lo envía a través de WriteFile al mismo puerto COM. La clave es que hay una relación de recepción/envío entre mí y el dispositivo.
Mi pregunta es, ¿tengo aquí un modelo de productor/consumidor anidado? Si mi hilo de recepción está consumiendo desde el dispositivo y el hilo de envío está produciendo en el dispositivo, los hilos necesitan hablar inherentemente para que estén sincronizados, ¿no? ¿Cuál es la mejor manera de sincronizar mis esfuerzos para hablar de manera eficiente y rápida con el dispositivo? Nota: Estoy usando C++ Builder 5 que tiene TThreads y puedo usar secciones críticas y mutexes.
Editar: ¡También estoy usando sondeo así que estoy abierto a usar WaitCommEvent también si esto funciona mejor!
Bien, pero ¿cómo sincronizo el acceso al dispositivo para que cuando estoy leyendo no escriba? Bandera global? –
¿Estás seguro de que tienes que hacerlo? De ser así, puede usar un semáforo para sincronizar las operaciones de lectura/escritura. Este http://stackoverflow.com/questions/1488712/is-it-safe-to-read-and-write-to-a-serial-port-at-the-same-time-via-different-thre podría ser servicial. – Duck