elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [QT C++] Como salir del bucle??
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [QT C++] Como salir del bucle??  (Leído 2,994 veces)
x7uk
Wiki

Desconectado Desconectado

Mensajes: 46


ekix siete uk


Ver Perfil WWW
[QT C++] Como salir del bucle??
« en: 28 Noviembre 2012, 16:56 pm »

Hola! Bueno programe un soft en C++ con Qt que envia y recibe datos por el puerto serie de la PC. Funciona perfecto pero ahora intentaba programar que busque automaticamente cual de los 16 puertos (COM) esta abierto y ahi el problema!

Pondre esa parte del codigo primero:
Código:
QList<QString> puertos;
        puertos << "COM2" << "COM3" << "COM4" << "COM5" << "COM6" << "COM7" << "COM8" << "COM9"<< "COM10" << "COM11" << "COM12" <<"COM13" << "COM14" << "COM15 "<< "COM16";
        QString COM;
        while(!conexion){ //conexion es una varible qe declare arriba. Mientras NO haya conexion:
             foreach(COM, puertos){
                port->setPortName(COM); //Seteo el nombre del puerto ej: COM7
                if(port->open(QextSerialPort::ReadWrite)){// si conecta:
                     conexion = true;
                     emit Connection_Ready(conexion, COM);
                }
              }//sino seguira sin conexion e intentara de nuevo con el siguiente COM del array.
           if (!conexion){
              emit Connection_Fail("[X]TODOS LOS PUERTOS CERRADOS!");
           }//la idea es que si los 16 COM estan cerrados imprima esto.
        }

Ahora bien, si por ejemplo tengo el COM7 abierto, el programa arranca prueba hasta ese COM y como esta abierto  ahi queda y funciona perfecto. El problema es cuando TODOS LOS COM ESTAN CERRADOS. Ya que al parecer entra en uN bucle infinito y el programa se cuelga  :( Como puedo hacer para que esto deje de pasar? y en lugar de colgarse ejecute el ultimo bloque y mande al form que "TODOS LOS PUERTOS ESTAN CERRADOS" como quiero? :/

Gracias de antemano! se que tengo varios errores ahi ojala me puedan ayudar!


En línea

backtrack/hispanic-community-member/x7uk
febef

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: [QT C++] Como salir del bucle??
« Respuesta #1 en: 28 Noviembre 2012, 17:12 pm »

Hola!

    Creo que el problema esta acá el bucle while esta de más.


Código
  1.        foreach(COM, puertos){
  2.                port->setPortName(COM); //Seteo el nombre del puerto ej: COM7
  3.                if(port->open(QextSerialPort::ReadWrite)){// si conecta:
  4.                     conexion = true;
  5.                     emit Connection_Ready(conexion, COM);
  6.                }

    Al poner este bucle estamos recorriendo todos los elementos de COM, por lo tanto se va a conectar a todos los que pueda.

    Lo que tendrías que hacer es cuando ya este conectado a uno salir del foreach.

    Por otro lado el foreach solo pasa una vez por cada elemento por lo que no va a seguir probando siempre. Con el while lo que hacías es después de probar una vez con cada uno lo volvía a hacer si no tenia conexión.

    Si hay algo que haga q el while tenga que estar si o si entonces cambialo por una for que repita el procedimiento x veces ejemplo:
Código
  1. for(int i=0; !conexion && i<veces;i++ )
  2. {
  3.  //codigo
  4. }

edit:
Es más si cambias el foreach por un for podes hacer que termine cuando haya conectado...




« Última modificación: 28 Noviembre 2012, 17:21 pm por fex » En línea

x7uk
Wiki

Desconectado Desconectado

Mensajes: 46


ekix siete uk


Ver Perfil WWW
Re: [QT C++] Como salir del bucle??
« Respuesta #2 en: 28 Noviembre 2012, 17:20 pm »

Tenias razon! saque el while y problema solucionado! ya funciona bien :) Mil gracias Fex!
En línea

backtrack/hispanic-community-member/x7uk
febef

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: [QT C++] Como salir del bucle??
« Respuesta #3 en: 28 Noviembre 2012, 17:21 pm »



De nada :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda (Parar bucle con dato boolean) [bucle while]
Java
Dem0ny 5 14,727 Último mensaje 17 Diciembre 2008, 17:43 pm
por Dem0ny
como romper, cerrar, salir de un ciclo!!!
Programación C/C++
astro1 6 35,436 Último mensaje 1 Junio 2011, 06:06 am
por 4rkn63l
Salir de bucle cuando el caracter es un espacio [Resuelta]
Programación C/C++
diegoCmC 8 6,174 Último mensaje 7 Junio 2011, 16:27 pm
por diegoCmC
Como hago un break para salir
Java
Zedmix 4 2,069 Último mensaje 25 Febrero 2012, 01:43 am
por Proteus1989
Como salir del bucle (preferiblemente con algun system())
Programación C/C++
alpachino98 2 1,160 Último mensaje 23 Octubre 2017, 19:45 pm
por alpachino98
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines