#ifndef THREAD_H
#define THREAD_H

#include <iostream>
#include <map>
#include <SDL_thread.h>

class Thread
{
public:
    Thread();
    virtual ~Thread();// arrete automatiquement le thread meme si il est en cour
    bool start();// demarre la fonction run() dans un thread
    void stop();// arrete le thread
    void join();// ratache la thread au processus principale qui est bloqu� et attend que le run() se termine
    void setAutoDelete(bool autoDelete);// permet de declarer dynamiquement une class qui erite de Thread sans garder le pointeur, il sera delete a la fin du thread si l'argument est true

    bool threadRunning();

    bool lockMutex(std::string name);
    bool unlockMutex(std::string name);

    virtual void run() = 0;// tout devra se passer ici

protected:
    bool createLockMutex(std::string name);

private:
    static int ThreadInit(void* param);
    bool m_isstop;
    SDL_Thread *m_t;
    bool m_autoDelete;
    std::map<std::string, SDL_mutex*> m_mutexs;
};

#endif // THREAD_H