#ifndef Prozess_H
#define Prozess_H

#include "Betriebssystem.h"
#include "ReferenceCounter.h"

#ifdef WIN32
#pragma comment( lib, "Psapi.lib" )
#endif

namespace Framework
{
#ifdef WIN32
    struct MemoryInfo; //! aus dieser Datei
#endif
    class Prozess; //! aus dieser Datei

#ifdef WIN32
    struct MemoryInfo
    {
        unsigned long ausgelagerteFehler;
        __int64 höchsteAusgelagerterSpeicher;
        __int64 ausgelagerterSpeicher;
        __int64 höchsterAusgelagerterPool;
        __int64 ausgelagerterPool;
        __int64 höchsterNichtAusgelagerterPool;
        __int64 nichtAusgelagerterPool;
        __int64 vorreservierterSpeicher;
        __int64 höchsterVorreservierterSpeicher;
    };
#endif
    //! Diese Klasse findet informationen über einen laufenden Prozess heraus (CPU, MEM)
    //! Bei Ubuntu immer der eigene Prozess
    class Prozess : public virtual ReferenceCounter
    {
    private:
#ifdef WIN32
        int numProcessors;
        ULARGE_INTEGER lastCPU, lastSysCPU, lastUserCPU;
        void *pHandle;
#endif

    public:
        //! Konstruktor 
        DLLEXPORT Prozess();
        //! nicht constant 
#ifdef WIN32
        //! Setzt den Prozess, der überwacht werden soll (Nur für Windows)
        DLLEXPORT void setProcess( void *pHandle );
#endif
        //! Gibt den CPU verbrauch des Prozesses zurück
        DLLEXPORT double getCPU() const;
        //! Gibt den Speicherverbrauch des Prozesses zurück
        DLLEXPORT __int64 getMem() const;
#ifdef WIN32
        //! Gibt detailierte Informationen über den Speicherverbrauch des Prozesses zurück (Nur für Windows)
        DLLEXPORT MemoryInfo getMemInfo() const;
        //! Gibt die Anzahl der Threads zurück (Nur für Windows)
        DLLEXPORT int getThreadAnzahl() const;
#endif
    };
}

#endif