bool InterfazCliente::procesarEntrada(){ if(!continueInput) return false; string entrada = getEntrada(); vector<string> myvec = parse(entrada,' ','"'); return procesarComando(myvec); }
int main(){ system("clear"); tiempoEjec=time(NULL); listaEjecutando = list_create(); listaCpuLibres = list_create(); listaInicializando = list_create(); listaAfinalizar = list_create(); listaPorcentajeCpus = list_create(); listaCpus = list_create(); colaListos = queue_create(); colaIO = queue_create(); sem_init(&hayProgramas,0,0); sem_init(&hayCPU,0,0); sem_init(&hayIO,0,0); pthread_mutex_init(&mutexProcesoListo,NULL); pthread_mutex_init(&mutexInicializando,NULL); pthread_mutex_init(&mutexListaCpusLibres,NULL); pthread_mutex_init(&mutexIO,NULL); pthread_mutex_init(&mutexListaEjecutando,NULL); pthread_mutex_init(&mutexSwitchProc,NULL); pthread_mutex_init(&mutexFinalizarPid,NULL); pthread_mutex_init(&mutexListasCpu,NULL); pthread_mutex_init(&mutexListasPorcentajes,NULL); //creacion de la instancia de log logPlanificador = log_create("../src/log.txt", "planificador.c", false, LOG_LEVEL_INFO); //leemos el archivo de configuracion configPlanificador = leerConfiguracion(); //Inicia el socket para escuchar int serverSocket; server_init(&serverSocket, configPlanificador->puertoEscucha); printf("Planificador listo...\n"); tParametroSelector sel; sel.socket = serverSocket; sel.listaCpus = listaCpuLibres; pthread_t enviarAlCpu,selectorCpu,consumidorIO; pthread_attr_t attr; pthread_attr_init(&attr); /*creacion de hilos*/ pthread_create(&selectorCpu,&attr,selector,(void*)&sel); pthread_create(&enviarAlCpu,&attr,enviar,NULL); pthread_create(&consumidorIO,&attr,consumidor,NULL); int enviar = 1; int cantProc = 1; int lng = 0; char * message = 0; while(enviar){ /*reemplaza a fgets*/ while(1){ int c ; if ((c = getchar()) == EOF) break; message = realloc(message,lng + 1); message[lng] = c; lng++; if (c == '\n') break; } message = realloc(message,lng + 1); message[lng] = '\0'; if (!strcmp(message,"exit\n")) { enviar = 0; llegoexit = true; sem_post(&hayCPU); sem_post(&hayProgramas); sem_post(&hayIO); } else procesarComando(clasificarComando(message),message,&cantProc); /*reinicio*/ free(message); message = 0; lng = 0; } /*espero la terminacion de enviar*/ pthread_join(enviarAlCpu,NULL); pthread_join(consumidorIO,NULL); sem_destroy(&hayCPU); sem_destroy(&hayIO); sem_destroy(&hayProgramas); pthread_mutex_destroy(&mutexIO); pthread_mutex_destroy(&mutexInicializando); pthread_mutex_destroy(&mutexListaCpusLibres); pthread_mutex_destroy(&mutexListaEjecutando); pthread_mutex_destroy(&mutexProcesoListo); pthread_mutex_destroy(&mutexSwitchProc); pthread_mutex_destroy(&mutexFinalizarPid); pthread_mutex_destroy(&mutexListasCpu); pthread_mutex_destroy(&mutexListasPorcentajes); /*destruyo la lista y sus elementos*/ list_destroy_and_destroy_elements(listaCpuLibres,free); list_destroy_and_destroy_elements(listaEjecutando,free); list_destroy_and_destroy_elements(listaInicializando,free); list_destroy_and_destroy_elements(listaAfinalizar,free); list_destroy_and_destroy_elements(listaCpus,free); list_destroy_and_destroy_elements(listaPorcentajeCpus,free); /*destruyo la cola y sus elementos*/ queue_destroy_and_destroy_elements(colaListos,free); close(serverSocket); logTpoTotal(); return 0; }