- Por que es necesario usar write() junto con waitForBytesWritten() ???? - 2 actualizaciones
Juancar <magui...@gmail.com>: Dec 05 09:36AM -0800
Hola,
Sencillamente ese método "*serialPort.bytesAvailable()*" no debería estar
dentro de la condición del if, lo puedes usar pero es para saber cuantos
bytes tienes disponibles para leer, además lo pones como primera condición
con el operador OR ( || ) por lo que siempre que haya "algo que leer" será
distinto de 0 o TRUE, luego tienes la otra parte de la condición "
*serialPort.waitForReadyRead(2000)*" Que solo se evaluará cuando la función
anterior de 0. En este caso si lo que quieres garantizar es que el buffer
esté preparado para ser leído y que contenga datos lo suyo sería lo
siguiente:
if ( serialPort.waitForReadyRead(2000) && serialPort.bytesAvailable() > 0)
{
Si lo cambias por el siguiente código:
qint64 count;
if ( serialPort.waitForReadyRead(2000) &&(count =
serialPort.bytesAvailable()) > 0)
{
En la variable count tendrás el número de bytes disponibles aprovechando la
asignación para incluirla como condición, si no te gusta siempre se puede
anidar el if y quedaría de esta otra forma:
if ( serialPort.waitForReadyRead(2000)
{
count = serialPort.bytesAvailable()
if ( count > 0)
{
...
...
...
}
}
Siempre hay que tener mucho cuidado con las condiciones y tener muy claro
como se evalúan.
Saludos
{
El miércoles, 26 de noviembre de 2014 18:48:15 UTC+1, 2050f...@gmail.com
escribió:
2050f...@gmail.com: Dec 05 11:06AM -0800
Buenas tardes Juancar,
Gracias por tu valiosa respuesta, me ha ayudado a esclarecer este problema.
Pero haciendo las modificaciones que recomiendas, pues me genera otro
problemita. Del Terminal V1.9b envio la palabra exit por partes osea, "e"
luego "x" luego "i" y finalmente "t", cada letra la envia sin problemas y
solo una vez tanto a la consola como de vuelta al Terminal V1.9b, el
problema esta cuando nuevamente quiero enviar la palabra exit, de nuevo por
partes, es cuando en la consola me escribe esto :
"e"
"x"
"i"
"t"
"ex"
"exit"
"itex"
"exex"
El primer exit funciona bien, pero el segundo sale con regalo incluido, mi
pregunta es porque a la letra que envio le agrega letras que ya han sido
enviadas???? ahora lo bueno es que las envia a la consola y al terminal
V1.9b solo una vez.
He probado enviando la palabra test entera dos veces y luego la palabra
prueba, pues en la consola me escribe test test y la tercera deberia de ser
la palabra prueba, pero no en la consola me escribe test
nuevamente............................ :(
Me podria dar su punto de vista??. Muchisimas gracias de antemano por su
respuesta. Cordiales exitos.
El viernes, 5 de diciembre de 2014 18:36:46 UTC+1, Juancar escribió:
Has recibido este resumen porque estás suscrito a las actualizaciones de este grupo. Puedes modificar la configuración en la página de pertenencia al grupo.
Para anular tu suscripción a este grupo y dejar de recibir mensajes relacionados con él, envía un correo electrónico a qt-espanol+...@googlegroups.com.