BEGIN_ZKIT void* ThreadBase::threadFunc(void *arg) { ThreadBase *thread = (ThreadBase *)arg; if (thread == 0) { return 0; // error. } while (!thread->isTerminated()) { if (thread->run() < 0) { printf("\nthread=%d exit because of return value!", thread->getThreadId()); break; } } thread->threadStopped(); printf("\nthread exit: %d", thread->getThreadId()); return 0; }
ThreadBase *ThreadBase::getThreadById( ThreadId id ) { for( size_t i = 0; i < current_threads.size(); ++i ) { ThreadBase *thread = current_threads[i]; if( pthread_equal( thread->getThreadId(), id ) ) { return thread; } } return NULL; }
bool HapticThreadBase::inHapticThread() { PeriodicThread::ThreadId id = PeriodicThread::getCurrentThreadId(); for( vector< HapticThreadBase *>::iterator i = threads.begin(); i != threads.end(); ++i ) { ThreadBase *thread = dynamic_cast< ThreadBase * >( *i ); if( thread && pthread_equal( thread->getThreadId(), id ) ) return true; } return false; }