when qThread is destructed you will have to Join the thread and delete the pointer. Date: Fri, 15 Apr 2011 15:43:11 +0100 From: sfx810@googlemail.com To: boost-users@lists.boost.org Subject: Re: [Boost-users] [thread] : pause/resume thread
inside qthread contructor, copy just the following and you are good to go. mThread = new boost::thread(bind(&qthread::Execute, this));
Pardon my ignorance here, but I assume I also have to manually delete the mThread then ?,if not, when qThread object goes out of scope, who ll remove it, (or take its ownership) ? 2011/4/15 bit bit <g_rambot@hotmail.com> inside qthread contructor, copy just the following and you are good to go. mThread = new boost::thread(bind(&qthread::Execute, this)); Date: Fri, 15 Apr 2011 11:06:56 +0100 From: sfx810@googlemail.com To: boost-users@lists.boost.org Subject: [Boost-users] [thread] : pause/resume thread Hi All, I have just started learning boost. I want my thread to support following functions Pause(); Resume(); Stop();. I have come up with following code, which ends up as dead lock. Can some one please guide me as how to achieve the desired functionality. Would really appreciate any help. Thanks. Kaz class qthread { public: boost::thread* mThread; boost::condition_variable mCond; boost::mutex mMutex; bool mExit; qthread(): mExit(false) { // create function pointer to local Execute function boost::function<void (qthread*)> fptr = &qthread::Execute; fptr(this); // pass on function pointer along with this reference to boost thread boost::thread th0( fptr, this); // assign temp thread to local variable mThread = &th0; } void Resume() { mMutex.unlock(); mCond.notify_all(); } void Stop() { mThread->interrupt(); mExit = true; Resume(); } void Pause() { // todo } virtual void Execute() { std::cout<<"Entering thread Execution"<<std::endl; boost::unique_lock<boost::mutex> lock(mMutex); mCond.notify_all(); mCond.wait(lock); //<< DEAD LOCK int i = 0; while ( !mExit ) { try { while ( 1 ) { std::cout<<"Executing thread, cycle i = "<<++i<<std::endl; boost::this_thread::interruption_point(); } } catch( boost::thread_interrupted&) { std::cout<<"thread_interrupt exception"<<std::endl; mCond.wait(lock); } } std::cout<<"Exiting thread"<<std::endl; } }; //-------------------------- int main() { qthread qt; ///<< DEAD LOCK boost::this_thread::sleep(boost::posix_time::seconds(3) ); qt.Resume(); boost::this_thread::sleep(boost::posix_time::seconds(3) ); qt.Stop(); } _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users