[Jderobot] problema con C++

Ildefonso González Sánchez i.gonzalezsan en alumnos.urjc.es
Mar Jul 29 23:00:43 CEST 2014


Hola Laura,


por lo que he podido ver creo que el problema, es que no estas utilizando memoria compartida entre los hilos, para ello la mejor forma que conozco es la siguiente:

-te creas un par de ficheros shared.cpp, shared.h (por ejemplo)

-en shared.h te declaras la estructura que comentas

    struct item{
    std::string name;
    bool isActivate;
};

y te defines el array (pero como tipo de dato estático, esto quiere decir que siempre va a ocupar la misma posición de memoria, solo se declarara una vez y lo hilos podrán acceder a esta memoria y modificarla)

static struct item items[100];


Por último te defines, las cabeceras funciones constructor, destructor, set y get para acceder desde los hilos de un modo externo.

-en el fichero shared.cpp, vuelves a declarar el array y el cuerpo de las funciones.


De este modo, puedes incluir un mutex para controlar la concurrencia de los hilos cada vez que accedas a las posiciones de array desde estas funciones.(pthread_mutex_lock()/unlock() si usas poixis)


Y el modo de acceder, seria declarar el objeto desde el hilo y utilizar la función.


Micomponente::Shared mem;

mem.set();

o lo que es lo mismo, con punteros:

Micomponente::Shared *mem = new Micomponente::Shared::SM();

mem->set();


Un saludo, espero que te sirva.


Ildefonso González Sánchez



________________________________
De: jde-developers-bounces en gsyc.es <jde-developers-bounces en gsyc.es> en nombre de Laura Martín Ramírez <lmr92 en hotmail.es>
Enviado: martes, 29 de julio de 2014 16:33
Para: jderobot en gsyc.es
Cc: borjamonserrano en gmail.com
Asunto: [Jderobot] problema con C++

Hola a todos,

Estoy desarrollando la herramienta visual HFSM y tengo problema con C++. He hablado con JoseMaria y me ha comentado que estáis más duchos con C++ y podréis echarme una mano.

Quiero declarar un array de structs y modificarlos desde distintos hilos. Para ello me declaro el struct de la siguiente manera:

struct item{
    std::string name;
    bool isActivate;
};


Y el array lo declaro así:

struct item items[100];

Todo esto lo pongo dentro de la clase que creo, es decir después de :

#include <Ice/Ice.h>
#include <IceUtil/IceUtil.h>
#include <gtkmm.h>
class Application : public Gtk::Window {

Dentro de esta clase tengo unos hilos de ejecución. Y quiero modificar los valores de item de una posición del array por ejemplo:


items[0].name = "prueba";
items[0].isActivate =1;

Al modificarlos desde dentro de un hilo no se guarda en los valores del array. Lo que hago es desde un hilo modificar los valores como acabo de escribir y desde otro lo imprimo, pero me sale el valor al que se ha inicializado el array.

void* change ( void* ) {
      std::cout << items[i].name << std::endl;
}

Espero haberme explicado bien.

Muchas gracias,
Laura M.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://gsyc.escet.urjc.es/pipermail/jde-developers/attachments/20140729/6369a333/attachment-0001.htm 


More information about the Jde-developers mailing list