X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/a4175b2e216a20b86cc872dea8a08005c60617a5..dfe8486473094c0769fd1922329c3f0dfd8f43c0:/rpc/thr_pool.h diff --git a/rpc/thr_pool.h b/rpc/thr_pool.h index 4427aee..2a1a749 100644 --- a/rpc/thr_pool.h +++ b/rpc/thr_pool.h @@ -6,57 +6,23 @@ #include "fifo.h" +typedef std::function job_t; + class ThrPool { public: - struct job_t { - void (*f)(void *); //function point - void *a; //function arguments - }; - ThrPool(int sz, bool blocking=true); ~ThrPool(); - template bool addObjJob(C *o, void (C::*m)(A), A a); - void waitDone(); - bool takeJob(job_t *j); + bool addJob(const job_t &j); private: int nthreads_; bool blockadd_; - fifo jobq_; std::vector th_; - bool addJob(void (*f)(void *), void *a); + void do_worker(); }; -template bool -ThrPool::addObjJob(C *o, void (C::*m)(A), A a) -{ - - class objfunc_wrapper { - public: - C *o; - void (C::*m)(A a); - A a; - static void func(void *vvv) { - objfunc_wrapper *x = (objfunc_wrapper*)vvv; - C *o = x->o; - void (C::*m)(A ) = x->m; - A a = x->a; - (o->*m)(a); - delete x; - } - }; - - objfunc_wrapper *x = new objfunc_wrapper; - x->o = o; - x->m = m; - x->a = a; - return addJob(&objfunc_wrapper::func, (void *)x); -} - - #endif -