topical media & game development

talk show tell print

lib-of-vs-apps-addonsExamples-threadExample-src-threadedObject.h / h



  ifndef _THREADED_OBJECT
  define _THREADED_OBJECT
  
  include <ofMain.h>
  include <ofxThread.h>
  
  // this is not a very exciting example yet
  // but ofThread provides the basis for ofNetwork and other
  // operations that require threading.
  //
  // please be careful - threading problems are notoriously hard
  // to debug and working with threads can be quite difficult
  
  class threadedObject : public ofxThread{
  
          public:
  
              int count;  // threaded fucntions that share data need to use lock (mutex)
                          // and unlock in order to write to that data
                          // otherwise it's possible to get crashes.
                          //
                          // also no opengl specific stuff will work in a thread...
                          // threads can't create textures, or draw stuff on the screen
                          // since opengl is single thread safe
  
                  //--------------------------
                  threadedObject(){
                          count = 0;
                  }
  
                  void start(){
              startThread(true, false);   // blocking, verbose
          }
  
          void stop(){
              stopThread();
          }
  
                  //--------------------------
                  void threadedFunction(){
  
                          while( isThreadRunning() != 0 ){
                                  if( lock() ){
                                          count++;
                                          if(count > 50000) count = 0;
                                          unlock();
                                          ofSleepMillis(1 * 1000);
                                  }
                          }
                  }
  
                  //--------------------------
                  void draw(){
  
                          string str = "I am a slowly increasing thread. \nmy current count is: ";
  
                          if( lock() ){
                                  str += ofToString(count);
                                  unlock();
                          }else{
                                  str = "can't lock!\neither an error\nor the thread has stopped";
                          }
                          ofDrawBitmapString(str, 50, 56);
                  }
  
  };
  
  endif
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.