C/Visual C - Urgente Ayuda

 
Vista:

Urgente Ayuda

Publicado por Raul (1 intervención) el 01/07/2007 01:48:59
Necesito ayuda para hacer el siguiente ejercicio:
*Sea un taller mecanico que se dedica a la reparacion de coches. En dicho taller trabajan k mecanicos que reparan diarimente m coches. Realizar un programa en Windows utilizando hilos de manera que los operarios se repartan los coches de la mejor manera posible. Esto no quiere decir que todos reparen los mismos coches, si no que en la medida de lo posible ningun operario este parado.
Lo tengo ya hecho, pero no funciona del todo bien.Por favor,si alguien me puede echar una mano se lo agradezco.No suelo postear nada, pero es que estoy desesperado
Lo que tengo hecho es esto

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>
#include <dos.h>

#define mecanicos 2 //hay k mecanicos
#define coches 5//hay m coches

HANDLE meca[mecanicos];//Array de mutex para controlar los mecanicos
HANDLE c[coches]; //Array de hilos de coches
DWORD vectorC[coches];//Array con los parametros a pasar a la funciones de los hilos
DWORD idhilos[coches];//Array donde se van a guardar los ID´s de los hilos(interno)
DWORD WINAPI Trabajar(LPDWORD p);//funcion de inicio de los hilos
void Reparar(int c,int m);//funcion para cuando el filosofo i entre a pensar

void main(void)
{

printf("*****************************\n");
printf("******JORNADA LABORAL********\n");
printf("*****************************\n\n");

printf("Los mecanicos comienzan a trabajar..............\n");

for(int i=0;i<mecanicos;i++)//inicializamos los mutex
meca[i]=CreateMutex(NULL,FALSE,NULL);

for(int j=0;j<coches;j++)//creacion de los hilos "coches"
c[j]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Trabajar,&vectorC[j],0,&idhilos[j]);

for(int k=0;k<coches;k++)//le asigno a los identicadores de los hilos los valores de 0 a m
{
vectorC[k]=k;
}

WaitForMultipleObjects(coches,c,TRUE,INFINITE);//esperamos a que terminen los hilos

printf("Los mecanicos han terminado de reparar todos los coches\n\n");

for(int l=0;l<coches;l++)//cerramos los descriptores de los hilos
CloseHandle(c[l]);

for(int t=0;t<mecanicos;t++)//cerramos los descriptores de los mutex
CloseHandle(meca[t]);

}

DWORD WINAPI Trabajar(LPDWORD p)//funcion de los hilos
{
int n=*p+1;//guardamos el parametro con el numero del hilo
bool parar =false;

while (!parar)
{
for (int s=0;s<mecanicos;s++)
{

if(WaitForSingleObject(meca[s+1],1000)!=WAIT_TIMEOUT)//esperamos a que algun mecanico este libre
{
printf("\nEl mecanico %d empieza con el coche %d\n",s+1,n);
Reparar(n,s+1);
return (0);
}
}
parar = false;
}
return (0);
}

void Reparar(int c,int m)
{
int tiempo=0; //almacena el tiempo hipotetico que se tarda en reparar en este programa
printf("\nEl mecanico %d esta reparando \n", m);
tiempo = ((rand()%12)+1);
Sleep(tiempo*1000);//retardo adrede de entre 0 y 12 segundos dependiendo de la dificultad de la reparacion del vehiculo (en la realidad seria mas, suponemos cada segundo un cuarto de hora)
printf("\nEl mecanico %d ha reparado el coche %d\n",m ,c);
ReleaseMutex(meca[m+1]);//una vez acaba el mecanico estara libre de nuevo
}

Por que creeis que no funciona como debe, contestad a mi correo para soluciones o ideas.Gracias de antemano, Mi correo es este [email protected]
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder