Listing 5: UNIXThread.cpp — UNIX multithreading implementation


#include "UNIXThread.h"

void AUNIXThread::EntryPoint(void* param) {
   AUNIXThread* ptr = (AUNIXThread*) param;
   ptr->Run();
   ptr->SetDeadState();
}

AUNIXThread::AUNIXThread() {
   pthread_mutex_init(&mHandleLock,
                      pthread_mutexattr_default);
   pthread_create(&mThread, pthread_attr_default,
                  EntryPoint, (void*)this);
   pthread_detach(mThread);
}

AUNIXThread::~AUNIXThread() {
   if (mState != DEAD) Kill(true);
   pthread_mutex_destroy(&mHandleLock);
}

void AUNIXThread::Kill(bool force) {
   LockHandle();
   mState = TERMINATE;
   UnlockHandle();
}

void AUNIXThread::CheckStatus() {
   LockHandle();
   if (mState == TERMINATE) {
      mState = DEAD;
      UnlockHandle();
      pthread_exit((void*) 0);
   }
   UnlockHandle();
}
//End of File