#ifndef _WorkQueue_WorkQueue_h_ #define _WorkQueue_WorkQueue_h_ #include using namespace Upp; namespace MyWQ { #ifdef _MULTITHREADED class WorkQueue : NoCopy { struct MJob : public Link , Moveable { Callback cb; WorkQueue *work; MJob() : work(NULL) {} }; struct Pool { typedef Pool CLASSNAME; //Vector jobs; LinkOwner _jobs; int jobcount; MJob & NextFree(); Link * lastjob; int waiting_threads; Array threads; CriticalSection lock; Semaphore waitforjob; Pool(int threadnr = -1); ~Pool(); bool DoJob(); void ThreadRun(int tno); }; friend struct Pool; //static Pool& pool(); Pool _pool; Pool& pool(); Semaphore waitforfinish; int todo; public: void Do(Callback cb); WorkQueue& operator&(Callback cb) { Do(cb); return *this; } void Finish(); WorkQueue(); ~WorkQueue(); }; #else class WorkQueue : NoCopy { public: void Do(Callback cb) { cb(); } WorkQueue& operator&(Callback cb) { cb(); return *this; } void Finish() {} }; #endif } //namespace #endif