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
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
¡ 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.
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.
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