LOS ENUNCIADOS SON:
Código:
MI PROGRAMA PARA LA PRIMERA PARTE ES:1. Diseñar una aplicación informática orientada a mostrar el funcionamiento de los threads (hilos o procesos ligeros) La aplicación será de tipo consola Se diseñará una función “rutina” que utilice variables globales del proceso Se podrán lanzar como threads diferentes copias de la función “rutina” Se podrán parar todos los threads o individualmente cada uno Se podrá suspender y reactivar cada thread Se podrá ordenar la finalización de los threads y el proceso padre esperará la finalización de cada thread 2. Diseñar una modificación de aplicación informática anterior orientada a mostrar el funcionamiento de los procesos Se diseñará un proceso denominado “DOS” que muestre el valor de un sensor. La medida del sensor se simulará generando un valor de forma aleatoria. Se podrán lanzar, como procesos, diferentes copias del proceso “DOS” Se podrán parar todos los procesos o individualmente cada uno Se podrá suspender y reactivar cada proceso Se podrá ordenar la finalización de los procesos activados y el proceso padre esperará la finalización de cada uno de ellos 3. Diseñar una modificación de la aplicación anterior en la que el proceso DOS comparte, con exclusión mutua, el acceso memoria con el proceso principal. 4. Diseñar una modificación de la aplicación anterior en la que el proceso principal y el proceso DOS intercambian mensajes mediante “sockets” de tipo TCP. La reconexión será automática El mensaje llevará una cabecera de control de secuencia. Tanto el proceso principal como el proceso “DOS” podrán actuar como servidores o como clientes. La aplicación mostrará el uso de timers, watchdog y timeouts. 5. Diseñar una modificación de la aplicación anterior en la que el proceso principal mostrará los datos significativos del proceso “DOS” PID, identificador, uso de memoria, prioridad, etc.) pudiendo cambiar algunos de ellos.
Código c:
Ver original
#include <stdio.h> #include <conio.h> #include <process.h> #include <windows.h> HANDLE hConsoleOutput; HANDLE pPID[128]; // Variables Globales int Contador=0; int NUMERO=0; int FIN_THREAD=0; // FUNCIONES PARA LOS THREADS // FUNCION QUE HARAN TODOS LOS THREADS void Rutina(void *p) { // char Linea[100000]; // Esta declaración sólo sirve para ver el consumo de memoria int Orden; Orden=Contador; COORD xy; // COORD me dice dónde se escribirá toda la info de los Threads xy.X=0; // Coordenadas en el eje X xy.Y=16+Orden; // Coordenadas en el eje Y while (!FIN_THREAD) { SetConsoleCursorPosition(hConsoleOutput,xy ); Sleep(1000); NUMERO++; } SetConsoleCursorPosition(hConsoleOutput,xy ); _endthread(); } // FUNCION PARA LANZAR UN THREAD void Lanzar() { FIN_THREAD = 0; NUMERO=0; Contador++; pPID[Contador]=(HANDLE)_beginthread(Rutina, 0, NULL); } // FUNCION PARA SUSPENDER UN THREAD void Suspender() { char n; int Orden; Orden=Contador; COORD ij; ij.X=0; ij.Y=14; SetConsoleCursorPosition(hConsoleOutput,ij); SuspendThread(pPID[n-'0']); Sleep(1); SetConsoleCursorPosition(hConsoleOutput,ij); } // FUNCION PARA REANUDAR UN THREAD void Reanudar() { char n; int Orden; Orden=Contador; COORD ij; ij.X=0; ij.Y=14; SetConsoleCursorPosition(hConsoleOutput,ij); ResumeThread(pPID[n-'0']); Sleep(1); SetConsoleCursorPosition(hConsoleOutput,ij); } //FUNCION PARA PARAR UN THREAD void Parar_Thread() { char n; int Orden; Orden=Contador; COORD ij; ij.X=0; ij.Y=14; SetConsoleCursorPosition(hConsoleOutput,ij); Sleep(1); SetConsoleCursorPosition(hConsoleOutput,ij); TerminateThread(pPID[n-'0'],0); } // FUNCION PARA PARAR TODOS LOS THREADS A LA VEZ void Parar_Todo() { int i; int Orden; Orden=Contador; COORD ij; ij.X=0; ij.Y=14; i=ij.Y; SetConsoleCursorPosition(hConsoleOutput,ij); FIN_THREAD =1; for (i=12;i<=(12+Orden);i++) { } Contador=0; } // FUNCION TERMINAR PROGRMA void Fin() { COORD ij; ij.X=0; ij.Y=14; SetConsoleCursorPosition(hConsoleOutput,ij); Parar_Todo(); Sleep(1); SetConsoleCursorPosition(hConsoleOutput,ij); Sleep(4000); } // PROGRAMA PRINCIPAL int main() { char n; SetConsoleTitle("Ejercicio 1"); hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); while (1) { { case 'T': Fin(); return 1; break; case 'L': Lanzar(); break; case 'S': Suspender(); break; case 'R': Reanudar(); break; case 'P': Parar_Thread(); break; case 'F': Parar_Todo(); break; } } return 0; }
Por favor, a ver si alguien me ayuda que estoy mas que desesperado, no me importaria pagar por el resultado de verdad.
Muchas gracias