コード例 #1
0
ファイル: Nivel.c プロジェクト: julietaf/repo20132C
void dibujar() {

	if (desactivarGUI) {
		return;
	}
	log_trace(logFile, "Dibujando...");
	pthread_mutex_lock(mutexDibujables);

	t_list* tempI;

	tempI = list_create();

	list_add_all(tempI, listaRecursos);
	list_add_all(tempI, listaPersonajes);
	list_add_all(tempI, listaEnemigos);

	if (nivel_gui_dibujar(tempI, configObj->nombre) == -1) {
		log_info(logFile, "No se puedo dibujar");
		//      EXIT_FAILURE;
	} else {
		log_trace(logFile, "Dibujado...");
	}

	pthread_mutex_unlock(mutexDibujables);

}
コード例 #2
0
void crearHilosConexionRedLocal(nodosRedLocal* worker){

	parametrosReduccionLocal* parametrosConexion = malloc(sizeof(parametrosReduccionLocal));
	parametrosConexion->ip.cadena = strdup(worker->ip.cadena);
	parametrosConexion->ip.longitud = worker->ip.longitud;
	parametrosConexion->numero = worker->numeroNodo;
	parametrosConexion->puerto = worker->puerto;
	parametrosConexion->rutaDestino.longitud = worker->archivoTemporal.longitud;
	parametrosConexion->rutaDestino.cadena = strdup(worker->archivoTemporal.cadena);
	parametrosConexion->archivosTemporales = list_create();
	list_add_all(parametrosConexion->archivosTemporales,worker->archivos);

	setearTiempo(RED_LOCAL,worker->numeroNodo);

	pthread_t nuevoHilo;
	pthread_attr_t attr;

	pthread_attr_init(&attr);
	pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);


	if (pthread_create(&nuevoHilo, &attr, (void*)conectarseConWorkersRedLocal, parametrosConexion) != 0) {
		log_error(loggerMaster, "No se pudo crear el thread de conexion");
		exit(-1);
	}

}
コード例 #3
0
void* conectarseConWorkerRedGlobal(void* params){
	parametrosReduccionGlobal* parametrosConexion= malloc(sizeof(parametrosReduccionGlobal));
	respuestaReduccionGlobal* infoRedGlobal =(respuestaReduccionGlobal*) params;
	respuesta confirmacionWorker;

	int socketWorker = crearSocket();
	struct sockaddr_in direccion = cargarDireccion(infoRedGlobal->ip.cadena,infoRedGlobal->puerto);
	if(!conectarCon(direccion, socketWorker, 2)){//2 id master
		mandarFalloEnReduccion();
		return 0;
	}

	log_trace(loggerMaster, "Inicio Red. Global con Worker %d para Job %d", infoRedGlobal->numero, infoRedGlobal->job);

	struct stat fileStat;
	if(stat(miJob->rutaReductor.cadena,&fileStat) < 0){
		printf("No se pudo abrir el archivo\n");
		return 0;
	}

	int fd = open(miJob->rutaReductor.cadena,O_RDWR);
	int size = fileStat.st_size;

	parametrosConexion->contenidoScript.cadena = mmap(NULL,size,PROT_READ,MAP_SHARED,fd,0);
	parametrosConexion->contenidoScript.longitud = size;
	parametrosConexion->archivoTemporal.cadena = strdup(infoRedGlobal->archivoTemporal.cadena);
	parametrosConexion->archivoTemporal.longitud = infoRedGlobal->archivoTemporal.longitud;
	parametrosConexion->infoWorkers = list_create();
	list_add_all(parametrosConexion->infoWorkers,infoRedGlobal->parametros->infoWorkers);

	empaquetar(socketWorker, mensajeProcesarRedGlobal, 0, parametrosConexion);

	confirmacionWorker = desempaquetar(socketWorker);

	if (munmap(parametrosConexion->contenidoScript.cadena, parametrosConexion->contenidoScript.longitud) == -1){
		perror("Error un-mmapping the file");
		exit(EXIT_FAILURE);
	}
	close(fd);

	switch(confirmacionWorker.idMensaje){
		case mensajeOk:
		case mensajeRedGlobalCompleta:
			log_trace(loggerMaster, "Informo YAMA fin de Reduccion Global en nodo %i",infoRedGlobal->numero);
			empaquetar(socketYama, mensajeRedGlobalCompleta, 0 , 0);
			estadisticas->cantTareas[RED_GLOBAL]++;
			finalizarTiempo(estadisticas->tiempoFinRedGlobal,infoRedGlobal->numero);
			break;

		case mensajeDesconexion:
		case mensajeFalloRedGlobal:
			log_trace(loggerMaster, "Informo a  YAMA fallo en Reduccion Global del nodo %d.",infoRedGlobal->numero);
			estadisticas->cantFallos++;
			mandarFalloEnReduccion();
			break;
	}

	return 0;
}
コード例 #4
0
t_list* copyList(t_list* original, pthread_mutex_t* mutex) {
	t_list* copiedList = list_create();
	pthread_mutex_lock(mutex);
	list_add_all(copiedList, original);
	pthread_mutex_unlock(mutex);

	return copiedList;
}