| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | #include "Thread.h"Thread::Thread(): m_isstop(true), m_autoDelete(false){}Thread::~Thread(){    if(!m_isstop)    {        SDL_KillThread(m_t);        m_t = 0;    }    for(std::map<std::string, SDL_mutex*>::iterator mutex = m_mutexs.begin();mutex != m_mutexs.end();mutex++)        SDL_DestroyMutex(mutex->second);}bool Thread::start(){    if(m_isstop)    {        m_t = SDL_CreateThread(Thread::ThreadInit, this);        if(m_t != 0)        {            m_isstop = false;            return true;        }    }    return false;}void Thread::stop(){    if(!m_isstop)    {        SDL_KillThread(m_t);        m_t = 0;    }    m_isstop = true;}void Thread::join(){    SDL_WaitThread(m_t, 0);    m_isstop = true;}void Thread::setAutoDelete(bool autoDelete){    m_autoDelete = autoDelete;}int Thread::ThreadInit(void* param){    Thread *t(reinterpret_cast<Thread*>(param));    t->run();    if(t->m_autoDelete)        delete t;    return 0;}bool Thread::threadRunning(){    return m_isstop;}bool Thread::createLockMutex(std::string name){    std::map<std::string, SDL_mutex*>::iterator mutex = m_mutexs.find(name);    if(m_mutexs.find(name) == m_mutexs.end())    {        m_mutexs[name] = SDL_CreateMutex();        mutex = m_mutexs.find(name);    }    if(SDL_mutexP(mutex->second)==-1)        return false;    return true;}bool Thread::lockMutex(std::string name){    std::map<std::string, SDL_mutex*>::iterator mutex = m_mutexs.find(name);    if(m_mutexs.find(name) == m_mutexs.end())        return false;    if(SDL_mutexP(mutex->second)==-1)        return false;    return true;}bool Thread::unlockMutex(std::string name){    std::map<std::string, SDL_mutex*>::iterator mutex = m_mutexs.find(name);    if(m_mutexs.find(name) == m_mutexs.end())        return false;    if(SDL_mutexV(mutex->second)==-1)        return false;    return true;}
 |