C/Visual C - Processos distribuidos

 
Vista:

Processos distribuidos

Publicado por oscar (20 intervenciones) el 12/04/2006 17:43:40
hola
tengo un ejecutable que instancia varios punteros a objetos (es necesario que los objetos se manejen mediante punteros), el problema es que existe gran probabilidad de que el exe se detenga en una instruccion (o sea que se quede colgado), en tal caso se debe hacer un kill al proceso ( se trabaja sobre unix ), pero como son punteros a objetos, estos todavia quedan en memoria, y el kill no puede eliminarles, la pregunta es: como eliminar a estos procesos, si el proceso padre no responde??? existe algun parametro en el kill que pueda eliminar al proceso y a todos los sub-procesos que dependan de este??
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

RE:Processos distribuidos

Publicado por fernando.gomez (1603 intervenciones) el 12/04/2006 19:17:49
Quizás podrías emplear std::auto_ptr en tus punteros, o cualquier otro Smart Pointer (ver "Modern C++ Design", de Andrei Alexandrescu para obtener ideas sobre diferentes diseños de punteros inteligentes, o busca la librería "Loki" en sourceforge.net, de Alexandrescu). Así, cuando se termine tu programa de forma abrupta, se llama inevitablemente al destructor de tus objetos.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Processos distribuidos

Publicado por oscar (20 intervenciones) el 12/04/2006 22:33:49
que complejo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Processos distribuidos

Publicado por fernando.gomez (1603 intervenciones) el 12/04/2006 23:39:20
Bueno, sí, Loki es complejo... pero bueno, siempre puedes crear tu sencillo puntero inteligente...

template<typename T>
class SmartPtr
{
private:
T* m_pPtr;
public:
SmartPtr()
{
m_pPtr = NULL;
}

SmartPtr(T* pPtr)
{
m_pPtr = pPtr;
}

~SmartPtr()
{
if (m_pPtr != NULL)
{
delete m_pPtr;
}
}

T* GetPtr() const
{
return m_pPtr;
}

void SetPtr(T* pPtr)
{
m_pPtr = pPtr;
}
};

Más aún, podrías sobrecargar los operadores de referencia y dereferencia (->, *) para que accedas fácilmente al elemento. Cuando el objeto inteligente salga de ámbito eliminará el puntero.

NOTA: Si necesitas que el puntero se conserve porque tienes varios punteros al mismo objeto, realmente deberías emplear std::auto_ptr.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Loki

Publicado por oscar (20 intervenciones) el 19/04/2006 22:19:20
Viendo mas un poco de loki, existen mas utulidades que este conjunto de bibliotecas ofrece, pero puedo hacer software comercial con estos? tiene algun tipo de soporte? o es lanzarse a lo desconocido?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar