Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: d91 en 23 Octubre 2015, 03:26 AM

Título: problema con if
Publicado por: d91 en 23 Octubre 2015, 03:26 AM
hola a todos, tengo una lista doblemente enlazada con nodos con una variable llamado "verificado" y siempre que sea su valor sea 1 de esta variable deberá entrar al if hasta que en algún momento sea 0, en un momento dado tengo un proceso mayor al quantum y la variable se pone en 1 y aumenta la bandera, el bucle se queda infinito al hacer una segunda comprobación de la lista porque todos aparecen con verificado = 0, y ya no puedo entrar a restar la bandera, no se si el error esta al poner la lista nuevamente al primer nodo
Código (cpp) [Seleccionar]

void SchedulerRoundRobin(Tlista &lista){

 OrdenarTiempoLlegada(lista);

 Tlista aux, tempLista;

 cont = 0;

  aux = lista;

  bandera = 0;

  do{

            while(lista != NULL){


                   if(lista->CPUaux > quantum ){

                        cont = cont + quantum;

                          bandera = bandera + 1;

                             lista->verificado = 1;


                             tempLista = lista->anterior; //adjudicando listatemporal

                            lista->espera = lista->espera + tempLista->enEjecutarse;

                             lista->CPUaux = lista->CPUaux - quantum;//aqui resto y al segundo recorrido

                             lista = lista->sgte;//el proceso ya no entrara


                       }//if del quantum//aqui porque sera menor al quantum;


                       else if(lista->verificado != 0){

                            if(lista->espera != 0){

                            bandera = bandera - 1;

                            }//if aux->espera

                            cont = cont + lista->CPUaux;

                            lista->verificado = 0;


                            lista->enEjecutarse = cont;

                            if(lista->anterior != NULL){

                            tempLista = lista->anterior; //adjudicando listaTemporal

                            lista->espera = lista->espera + tempLista->enEjecutarse;

                            }//if != NULL
                            else{

                            lista->espera = 0;

                            }//else

                            lista = lista->sgte;

                       }//else if

              }//while secundario

              lista = aux;//reiniciando la lista al primer nodo


     }while(bandera > 0);//while principal


}//calendarizacion turno circular


Título: Re: problema con if
Publicado por: soyloqbuskas en 23 Octubre 2015, 06:23 AM
¡ Buenas d91 !

EL problema del bucle infinito creo que lo tienes en la linea 15
Citarwhile(lista != NULL){
Para salir de ese bucle necesitas que en algun momento la variable lista sea igual a null y eso nunca ocurre, al final pones lista=aux; pero aux no esta inicializado a null asi que nunca salimos del bucle.

un saludo.
Título: Re: problema con if
Publicado por: d91 en 23 Octubre 2015, 17:45 PM
la salida de ese bucle esta asegurado  en la línea 67, el problema lo tengo que al salir y la bandera vale 1 debe volver a recorrer la lista para ese entonces  el nodo valdra menos que el quantum y debería traer un 1 en la variable verificado y entrar en el siguiente if pero no lo hace y entonces se queda enciclado.
Título: Re: problema con if
Publicado por: d91 en 23 Octubre 2015, 18:36 PM
hacer uso del turbo debugger quiere un poco de paciencia, pero al fin encontré el error, teniendo if anidados si en algún momento no entra en ninguno de los dos debe haber un else para adelantar la lista, o sea en teoría en el segundo recorrido estaba comparando el mismo nodo todas las veces y por eso quedaba enciclado