elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Foros Generales
| |-+  Dudas Generales (Moderador: engel lex)
| | |-+  Alguien entiende de threads en c++ metodos de sincronizacion
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Alguien entiende de threads en c++ metodos de sincronizacion  (Leído 1,576 veces)
vertigo123

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Alguien entiende de threads en c++ metodos de sincronizacion
« en: 7 Diciembre 2013, 17:08 pm »

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++)
        {       
        }
     }
}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Haber si alguien entiende esto?
Programación Visual Basic
n3ts4mura1 7 2,417 Último mensaje 6 Agosto 2006, 06:02 am
por -POLACO-
[Duda] Alguien entiende este código en Pseudocódigo? « 1 2 3 »
Programación General
Dreamaker 22 12,985 Último mensaje 10 Mayo 2010, 01:39 am
por IDarknightI
traduccion dirigida por sintaxis, alguien lo entiende?
Java
danielo- 0 2,923 Último mensaje 3 Diciembre 2010, 01:40 am
por danielo-
¿Alguien entiende que esto? ¿DoS?
Dudas Generales
JollyRoyer 2 2,070 Último mensaje 6 Diciembre 2014, 20:04 pm
por #!drvy
alguien entiende de lucha? « 1 2 3 4 »
Foro Libre
biblio_656 34 13,944 Último mensaje 19 Julio 2016, 20:35 pm
por biblio_656
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines