#include class Thread { public: class pt_error{}; virtual void run(); virtual void stop(); virtual bool running() const; virtual void join(); virtual void setup(); virtual ~Thread(); static void sleep(unsigned long msecs); void Arg(void* a){arg_ =a;}; void* Arg(){return arg_;}; protected: void start(void*); virtual void *main(void *)=0; private: static void static_run(void* arg); Thread(const Thread&); Thread& operator=(const Thread&); pthread_t tid; void * arg_; }; /*static */ void Thread::static_run(void* pthis) { ((Thread*)pthis)->run(); } void Thread::run() { setup(); pthread_create(&tid,NULL,Thread::main,arg_); }