// hilo.h - Declaración de la clase CHilo.
//          Permite manipular hilos POSIX Pthread
#if !defined( _HILO_H_ )
#define _HILO_H_

#include <string>
#include <pthread.h>
using namespace std;

class CHilo
{
  private:
    string m_nombreHilo;               // nombre del hilo
    pthread_t m_idHilo;                // identificador del hilo
    pthread_attr_t *m_attr;            // atributos del hilo
    static void *ejec_hilo(void *arg); // invoca a fnHilo
  protected:
    virtual void *fnHilo() = 0;        // hilo de ejecución
  public:
    CHilo(string nom = "", pthread_attr_t *attr = 0);
    virtual ~CHilo();
    void iniciar();                // inicia el hilo
    void *esperar_finalizacion();  // espera a que el hilo finalice
    string obtener_nombre() const; // devuelve m_nombreHilo
    void asignar_nombre(string);   // asigna el nombre del hilo
    void *obtener_id() const;      // devuelve m_idHilo.p
    void asignar_atributos(pthread_attr_t *attr); // atributos
};

#endif // _HILO_H_

