Hola de nuevo y disculpas por el spam....jejejeje....Les queria pedir por favor que me dieran una idea o un ejemplo sencillo de como usar metodos sincronizados en c++ sean en visual o devc++....tengo un c´digo en java del ejercicico que quiero hacer nada mas que en c++ y creo que me pase en pedir una traduccion pero mi duda va hacia esa parte....aqui les dejo el codigo en java que funciona y adjunto mi codigo en c++ hasta el momento....Solo para que me guien como irme y como hacer los pasos y metodos adecuados para que mi programa funcione ya que si lo pongo por partes no van a aentender ustedes
Mi gran duda es en como usar los metodos synchronized de java a c++.
En conclusión lo que le spido por favor es que me ayuden en los metodos sincronizados ya que es alli donde tengo el problema se los agradeceré mucho!.
CODIGO JAVA:
http://foro.elhacker.net/dudas_generales/me_podrian_ayudar_a_pasar_codigo_java_a_c_por_favor-t404057.0.html
MI CODIGO C++:
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <list>
#include <stdio.h>
#include <pthread.h>
#ifdef _MSC_VER
#pragma comment(lib, "ptrheadVC2.lib")
#endif
using namespace std;
void Wait();
enum TEstadoPista{Aterrizar, Despegar, Vacia};
enum TEstadoAvion{QuiereAterrizar, QuiereDespegar, OtraCosa};
class Pista
{
public:
Pista(int id)
{
id = id;
estado = TEstadoPista(Vacia);
naviones = 0;
}
void setEstado(TEstadoPista estado);
TEstadoPista getEstado(){return estado;}
void setNaviones(int naviones);
int getNaviones(){return naviones;}
private:
int id;
TEstadoPista estado;
int naviones;
};
void Pista::setEstado(TEstadoPista estado)
{
estado = estado;
}
void Pista::setNaviones(int naviones)
{
naviones = naviones;
}
class TorreControl
{ public:
const int MAXAVIONES=10;
Pista *pistas[2];
int pistasAviones[MAXAVIONES];
TEstadoAvion estAviones[MAXAVIONES];
int esperandoAterrizar;
TorreControl()
{
esperandoAterrizar = 0;
pistas[0] = new Pista(1);
pistas[1] = new Pista(2);
}
int *PedirPistaAterrizar(int idAvion)
{
pistasAviones[idAvion]=0;
estAviones[idAvion] = TEstadoAvion::QuiereAterrizar;
for(int i=0; i<2; i++)
{
if((pistas->getEstado()==TEstadoPista::Vacia) && (estAviones[idAvion]==TEstadoAvion::QuiereAterrizar))
{
pistas->setEstado(TEstadoPista::Aterrizar);
pistas->setNaviones(pistas->getNaviones() + 1);
estAviones[idAvion] = TEstadoAvion::OtraCosa;
pistasAviones[idAvion] = i+1;
}
}
if(estAviones[idAvion]==TEstadoAvion::QuiereAterrizar)
{
esperandoAterrizar = esperandoAterrizar + 1;
}
return pistasAviones[idAvion];
}
int TorreControl::PuedeAterrizar(int idAvion)
{
while(estAviones[idAvion] == TEstadoAvion::QuiereAterrizar)
{
try
{
wait();
}
catch(exception ex)
{
cout<<"Interrupción"<<endl;
}
}
return pistasAviones[idAvion];
}
int TorreControl::PedirPistaDespegar(int idAvion)
{
pistasAviones[idAvion] = 0;
estAviones[idAvion] = TEstadoAvion::QuiereDespegar;
if(esperandoAterrizar==0)
{
for(int i=0; i<2; i++)
{
//Revisar Aquí.
if((pistas->getEstado()==TEstadoPista::Vacia) || (pistas->getEstado()==TEstadoPista::Despegar && pistas->getNaviones() < 3))
{
pistas->setEstado(TEstadoPista::Despegar);
pistas->setNaviones(pistas->getNaviones() + 1);
estAviones[idAvion] = TEstadoAvion::OtraCosa;
pistasAviones[idAvion] = i + 1;
}
}
}
return pistasAviones[idAvion];
}
int TorreControl::PuedeDespegar(int idAvion)
{
while(estAviones[idAvion]==TEstadoAvion::QuiereDespegar)
{
try
{
wait();
}
catch(exception ex)
{
cout<<"Despegando"<<endl;
}
}
}
void TorreControl::GestionarEsperas()
{
for(int i=0; i<MAXAVIONES; i++)
{
if(estAviones==TEstadoAvion::QuiereAterrizar)
{
for(int j=0; j<2; j++)
{
if((pistas[j]->getEstado()==TEstadoPista::Vacia) && (estAviones==TEstadoAvion::QuiereAterrizar))
{
pistas[j]->setEstado(TEstadoPista::Despegar);
pistas[j]->setNaviones(pistas->getNaviones()+1);
estAviones = TEstadoAvion::OtraCosa;
pistasAviones=j+1;
esperandoAterrizar = esperandoAterrizar - 1;
notifyAll();
}
}
}
else if(estAviones==TEstadoAvion::QuiereDespegar && esperandoAterrizar==0)
{
for(int k=0; k<2; k++)
{
if((pistas[k]->getEstado()== TEstadoPista::Vacia) || (pistas[k]->getEstado()==TEstadoPista::Despegar && pistas[k]->getNaviones()<3) && (estAviones==TEstadoAvion::QuiereDespegar))
{
pistas->setEstado(TEstadoPista::Despegar);
pistas->setNaviones(pistas->getNaviones()+1);
estAviones = TEstadoAvion::OtraCosa;
pistasAviones = i+1;
notifyAll();
}
}
}
}
}
};
class Avion:
{
};
int main(int argc, char *argv[])
{
const int MAXAVIONES = 10;
system("PAUSE");
return 0;
}
void Wait()
{
for(int i=0; i<10000; i++)
{
for(int j=0; j<100000; j++)
{
}
}
}
Mi gran duda es en como usar los metodos synchronized de java a c++.
En conclusión lo que le spido por favor es que me ayuden en los metodos sincronizados ya que es alli donde tengo el problema se los agradeceré mucho!.
CODIGO JAVA:
http://foro.elhacker.net/dudas_generales/me_podrian_ayudar_a_pasar_codigo_java_a_c_por_favor-t404057.0.html
MI CODIGO C++:
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <list>
#include <stdio.h>
#include <pthread.h>
#ifdef _MSC_VER
#pragma comment(lib, "ptrheadVC2.lib")
#endif
using namespace std;
void Wait();
enum TEstadoPista{Aterrizar, Despegar, Vacia};
enum TEstadoAvion{QuiereAterrizar, QuiereDespegar, OtraCosa};
class Pista
{
public:
Pista(int id)
{
id = id;
estado = TEstadoPista(Vacia);
naviones = 0;
}
void setEstado(TEstadoPista estado);
TEstadoPista getEstado(){return estado;}
void setNaviones(int naviones);
int getNaviones(){return naviones;}
private:
int id;
TEstadoPista estado;
int naviones;
};
void Pista::setEstado(TEstadoPista estado)
{
estado = estado;
}
void Pista::setNaviones(int naviones)
{
naviones = naviones;
}
class TorreControl
{ public:
const int MAXAVIONES=10;
Pista *pistas[2];
int pistasAviones[MAXAVIONES];
TEstadoAvion estAviones[MAXAVIONES];
int esperandoAterrizar;
TorreControl()
{
esperandoAterrizar = 0;
pistas[0] = new Pista(1);
pistas[1] = new Pista(2);
}
int *PedirPistaAterrizar(int idAvion)
{
pistasAviones[idAvion]=0;
estAviones[idAvion] = TEstadoAvion::QuiereAterrizar;
for(int i=0; i<2; i++)
{
if((pistas->getEstado()==TEstadoPista::Vacia) && (estAviones[idAvion]==TEstadoAvion::QuiereAterrizar))
{
pistas->setEstado(TEstadoPista::Aterrizar);
pistas->setNaviones(pistas->getNaviones() + 1);
estAviones[idAvion] = TEstadoAvion::OtraCosa;
pistasAviones[idAvion] = i+1;
}
}
if(estAviones[idAvion]==TEstadoAvion::QuiereAterrizar)
{
esperandoAterrizar = esperandoAterrizar + 1;
}
return pistasAviones[idAvion];
}
int TorreControl::PuedeAterrizar(int idAvion)
{
while(estAviones[idAvion] == TEstadoAvion::QuiereAterrizar)
{
try
{
wait();
}
catch(exception ex)
{
cout<<"Interrupción"<<endl;
}
}
return pistasAviones[idAvion];
}
int TorreControl::PedirPistaDespegar(int idAvion)
{
pistasAviones[idAvion] = 0;
estAviones[idAvion] = TEstadoAvion::QuiereDespegar;
if(esperandoAterrizar==0)
{
for(int i=0; i<2; i++)
{
//Revisar Aquí.
if((pistas->getEstado()==TEstadoPista::Vacia) || (pistas->getEstado()==TEstadoPista::Despegar && pistas->getNaviones() < 3))
{
pistas->setEstado(TEstadoPista::Despegar);
pistas->setNaviones(pistas->getNaviones() + 1);
estAviones[idAvion] = TEstadoAvion::OtraCosa;
pistasAviones[idAvion] = i + 1;
}
}
}
return pistasAviones[idAvion];
}
int TorreControl::PuedeDespegar(int idAvion)
{
while(estAviones[idAvion]==TEstadoAvion::QuiereDespegar)
{
try
{
wait();
}
catch(exception ex)
{
cout<<"Despegando"<<endl;
}
}
}
void TorreControl::GestionarEsperas()
{
for(int i=0; i<MAXAVIONES; i++)
{
if(estAviones==TEstadoAvion::QuiereAterrizar)
{
for(int j=0; j<2; j++)
{
if((pistas[j]->getEstado()==TEstadoPista::Vacia) && (estAviones==TEstadoAvion::QuiereAterrizar))
{
pistas[j]->setEstado(TEstadoPista::Despegar);
pistas[j]->setNaviones(pistas->getNaviones()+1);
estAviones = TEstadoAvion::OtraCosa;
pistasAviones=j+1;
esperandoAterrizar = esperandoAterrizar - 1;
notifyAll();
}
}
}
else if(estAviones==TEstadoAvion::QuiereDespegar && esperandoAterrizar==0)
{
for(int k=0; k<2; k++)
{
if((pistas[k]->getEstado()== TEstadoPista::Vacia) || (pistas[k]->getEstado()==TEstadoPista::Despegar && pistas[k]->getNaviones()<3) && (estAviones==TEstadoAvion::QuiereDespegar))
{
pistas->setEstado(TEstadoPista::Despegar);
pistas->setNaviones(pistas->getNaviones()+1);
estAviones = TEstadoAvion::OtraCosa;
pistasAviones = i+1;
notifyAll();
}
}
}
}
}
};
class Avion:
{
};
int main(int argc, char *argv[])
{
const int MAXAVIONES = 10;
system("PAUSE");
return 0;
}
void Wait()
{
for(int i=0; i<10000; i++)
{
for(int j=0; j<100000; j++)
{
}
}
}