Multithreading problems

This is the code of the class in the engine that handles the multithread:
Here’s the .cpp (i didn’ copy the #include’s).

PhantomSDL_CMULTITHREADING *PhantomSDL_CMULTITHREADING::mInstance = 0;

PhantomSDL_CMULTITHREADING::PhantomSDL_CMULTITHREADING()
{
mLog = PhantomSDL_CLOG::getInstance();
mLog->write(2,"[CMultiThreading]-> Singleton Created.");
}

PhantomSDL_CMULTITHREADING::~PhantomSDL_CMULTITHREADING()
{
mLog->write(2,"[CMultiThreading]-> Singleton Destroyed.");
PhantomSDL_CMULTITHREADING::waitAllThreads();
PhantomSDL_CMULTITHREADING::killAllThreads();
}

PhantomSDL_CMULTITHREADING* PhantomSDL_CMULTITHREADING::getInstance()
{
if ( PhantomSDL_CMULTITHREADING::mInstance == 0 )
{
mInstance = new PhantomSDL_CMULTITHREADING;
}
return mInstance;
}

void PhantomSDL_CMULTITHREADING::erase()
{
if( PhantomSDL_CMULTITHREADING::mInstance != 0)
{
delete mInstance;
}
}

void PhantomSDL_CMULTITHREADING::addThread(int (THREADName)(void), void*
THREADData)
{
mThreads.push_back(SDL_CreateThread(THREADName, THREADData));
mLog->write(2,"[CMultiThreading]-> added a Thread with the following
name: %s & data: %s",THREADName, THREADData);
}

void PhantomSDL_CMULTITHREADING::deleteThread(SDL_Thread* THREADName)
{
if(mThreads.empty())
{
mLog->write(2,"[CMultiThreading]-> no threads to kill.");
return;
}
std::list<SDL_Thread*>::iterator it;
for(it = mThreads.begin(); it != mThreads.end(); it++)
{
if( (*it) == THREADName)
{
SDL_KillThread( (*it) );
mThreads.erase(it);
(*it) = NULL;
mLog->write(2,"[CMultiThreading]-> the thread with the following
name was killed: %s.",THREADName);
break;
}
}
}

void PhantomSDL_CMULTITHREADING::waitForThread(SDL_Thread* THREADName, int*
Status)
{
std::list<SDL_Thread*>::iterator it;

for(it = mThreads.begin(); it != mThreads.end(); it++)
    {
    if( (*it) == THREADName)
        {
        SDL_WaitThread( (*it),NULL );
        break;
        }
    }
}

void PhantomSDL_CMULTITHREADING::waitAllThreads()
{
std::list<SDL_Thread*>::iterator it;

for(it = mThreads.begin(); it != mThreads.end(); it++)
    {
    SDL_WaitThread( (*it),NULL);
    mThreads.erase(it);
    (*it) = NULL;
    }
}

void PhantomSDL_CMULTITHREADING::killAllThreads()
{
std::list<SDL_Thread*>::iterator it;

for(it = mThreads.begin(); it != mThreads.end(); it++)
    {
    SDL_KillThread( (*it) );
    mThreads.erase(it);
    (*it) = NULL;
    }
}

Here is the header.

Code: #ifndef _PHANTOMSDL_MULTI_THREADING
#define _PHANTOMSDL_MULTI_THREADING
class PHANTOMSDL_EXPORT PhantomSDL_CMULTITHREADING
{
private:
//Private Properties And Methods For Singleton Pattern
static PhantomSDL_CMULTITHREADING* mInstance;
PhantomSDL_CMULTITHREADING();

            //Private Properties And Methods For Multithreading Handling

            std::list<SDL_Thread*> mThreads;
           // PhantomSDL_CLOG *mLog;

        public:
            //Public Properties And Methods For Singleton Pattern
            static PhantomSDL_CMULTITHREADING* getInstance();
            static void erase();
            ~PhantomSDL_CMULTITHREADING();

            //Public Properties And Methods For Multithreading Handling
            void addThread( int (*THREADName)(void*), void* THREADData =

NULL);
void deleteThread(SDL_Thread* THREADName);
void waitForThread(SDL_Thread* THREADName, int* Status = 0);

            void waitAllThreads();
            void killAllThreads();
        };
#endif

Anyway, i just can’t add a thread* =S, i dont think it’s well done, but at
least I tried.
I think the trouble is when adding threads…

Cya!–
Phantom Lord
Caelis Studios —> From Gods Hands To Yours