Muchas gracias Ildefonso, me ha quedado bastante claro igual cuando me ponga a hacerlo me surgen problemillas, pero ya lo he entendido y sé por dónde encaminarme :)<br><br>Muchísimas gracias de nuevo.<br>Un saludo,<br>Laura M.<br><br>Ildefonso González Sánchez <i.gonzalezsan@alumnos.urjc.es> wrote:<br><br>
<p>Hola Laura,</p>
<p><br>
</p>
<p>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:</p>
<p>-te creas un par de ficheros shared.cpp, shared.h (por ejemplo)</p>
<p>-en shared.h te declaras la estructura que comentas</p>
<p> <font style="" color="#2672EC"><em>struct item{<br>
std::string name;<br>
bool isActivate;<br>
};</em></font></p>
<p>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)</p>
<p><font style="" color="#2672EC"><em>static struct item items[100];</em></font></p>
<p><br>
<font style="" color="#2672EC"><em></em></font></p>
<p>Por último te defines, las cabeceras funciones constructor, destructor, set y get para acceder desde los hilos de un modo externo.</p>
<p>-en el fichero shared.cpp, vuelves a declarar el array y el cuerpo de las funciones.</p>
<p><br>
</p>
<p>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)</p>
<p><br>
</p>
<p>Y el modo de acceder, seria declarar el objeto desde el hilo y utilizar la función.</p>
<p><br>
</p>
<p>Micomponente::Shared mem;</p>
<p>mem.set();</p>
<p>o lo que es lo mismo, con punteros:</p>
<p>Micomponente::Shared *mem = new Micomponente::Shared::SM();<br>
</p>
<p>mem->set();<br>
</p>
<p><br>
</p>
<p>Un saludo, espero que te sirva.</p>
<p><br>
</p>
<p>Ildefonso González Sánchez<br>
</p>
<p><br>
</p>
<p><br>
</p>
<div style="color: rgb(33, 33, 33);">
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font style="font-size:11pt" color="#000000" face="Calibri, sans-serif"><b>De:</b> jde-developers-bounces@gsyc.es <jde-developers-bounces@gsyc.es> en nombre de Laura Martín Ramírez <lmr92@hotmail.es><br>
<b>Enviado:</b> martes, 29 de julio de 2014 16:33<br>
<b>Para:</b> jderobot@gsyc.es<br>
<b>Cc:</b> borjamonserrano@gmail.com<br>
<b>Asunto:</b> [Jderobot] problema con C++</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div dir="ltr"><style>
<!--
.hmmessage p
{margin:0px;
padding:0px}
body.hmmessage
{font-size:12pt;
font-family:Calibri}
-->
</style>
<div dir="ltr">Hola a todos,
<div><br>
</div>
<div>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.
<br>
<br>
Quiero declarar un array de structs y modificarlos desde distintos hilos. Para ello me declaro el struct de la siguiente manera:<br>
<font style="" color="#2672EC"><br>
</font><font style="" color="#2672EC"><i>struct item{<br>
std::string name;<br>
bool isActivate;<br>
};</i></font><br>
<br>
<br>
Y el array lo declaro así:<br>
<br>
<font style="" color="#2672EC"><i>struct item items[100];</i></font><br>
<br>
Todo esto lo pongo dentro de la clase que creo, es decir después de :<br>
<br>
<font style="" color="#2672EC">#include <Ice/Ice.h></font><font style="" color="#2672EC"><br>
</font><font style="" color="#2672EC">#include <IceUtil/IceUtil.h></font><font style="" color="#2672EC"><br>
</font><font style="" color="#2672EC">#include <gtkmm.h></font><font style="" color="#2672EC"><br>
</font><font style="" color="#2672EC">class Application : public Gtk::Window {</font><br>
<br>
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:<br>
<br>
<font style="" color="#2672EC"><br>
</font><i><font style="" color="#2672EC">items[0].name = "prueba";</font><font style="" color="#2672EC"><br>
</font><font style="" color="#2672EC">items[0].isActivate =1;</font></i><br>
<br>
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.<br>
<br>
<font style="" color="#2672EC">void* change ( void* ) {</font><font style="" color="#2672EC"><br>
</font><font style="" color="#2672EC"> std::cout << items[i].name << std::endl;
</font><font style="" color="#2672EC"><br>
</font><font style="" color="#2672EC">}</font><br>
<br>
Espero haberme explicado bien.<br>
<br>
Muchas gracias,<br>
Laura M.<br>
</div>
</div>
</div>
</div>
</div>
</div>