The answer lies in Thread::threadEntryPoint (Thread* thread). Look at the last two lines of code:
thread->threadHandle_ = 0;
thread->threadId_ = 0;
Since you’ve already deleted the thread, thread points to nothing. That’s why you get an exception. [Edit] Plus all the housekeeping stuff Jules mentioned above [/Edit]
You should redesign so that you don’t have a thread for each thing you need to do, rather have a thread call jobs. Look at ThreadPool and ThreadPoolJob.