#include "thread.h" #include #include void * Thread::ThreadProc (void *param) { Thread *thread = (Thread *) param; int r = mutexLock(thread->mutex); if (r < 0) { thread->running = false; perror ("ThreadProc:mutexLock"); return 0; } thread->Proc (); thread->running = false; // this unsuspends a waiting "Kill" below r = mutexUnlock (thread->mutex); if (r < 0) { perror("ThreadProc:mutexUnlock"); } return 0; } void Thread::Run () { if (!running) { running = true; int r = threadCreate(p,ThreadProc,this); if (r != 0) { running = false; perror ("Thread::Run:threadCreate"); } } } void Thread::Kill () { if (running) { running = false; // signals thread to stop // now wait for clean thread exit (mutex unlock) mutexLock(mutex); mutexUnlock(mutex); } } static void sigquit(int sig) {} void Thread::Kill1() { if (running) { void (*ohr)(int sig) = signal(SIGQUIT,sigquit); running = false; // signals thread to stop // now wait for clean thread exit (mutex unlock) threadKill(p); // give it a push mutexLock(mutex); mutexUnlock(mutex); signal(SIGQUIT,ohr); } }