62 lines · 1.4 KB · C++
RawDownload
////  GenericThread.cpp//  shared////  Created by Brad Hefta-Gaub on 8/12/13.//  Copyright (c) 2013 High Fidelity, Inc. All rights reserved.////  Generic Threaded or non-threaded processing class// #include "GenericThread.h" GenericThread::GenericThread() :    _stopThread(false),    _isThreaded(false) // assume non-threaded, must call initialize(){} GenericThread::~GenericThread() {    terminate();} void GenericThread::initialize(bool isThreaded) {    _isThreaded = isThreaded;    if (_isThreaded) {        pthread_create(&_thread, NULL, GenericThreadEntry, this);    }} void GenericThread::terminate() {    if (_isThreaded) {        _stopThread = true;        pthread_join(_thread, NULL);        _isThreaded = false;    }} void* GenericThread::threadRoutine() {    while (!_stopThread) {         // override this function to do whatever your class actually does, return false to exit thread early        if (!process()) {            break;        }         // In non-threaded mode, this will break each time you call it so it's the        // callers responsibility to continuously call this method        if (!_isThreaded) {            break;        }    }     if (_isThreaded) {        pthread_exit(0);    }    return NULL;} extern "C" void* GenericThreadEntry(void* arg) {    GenericThread* genericThread = (GenericThread*)arg;    return genericThread->threadRoutine();}